Convertire una stringa JSON in una HashMap

Sto usando Java e ho una stringa che è JSON:

{ "name" : "abc" , "email id " : ["[email protected]","[email protected]","[email protected]"] } 

Quindi la mia mappa in Java:

 Map retMap = new HashMap(); 

Voglio memorizzare tutti i dati da JSONObject in HashMap.

Qualcuno può fornire il codice per questo? Voglio usare la libreria org.json .

Ho scritto questo codice alcuni giorni fa con la ricorsione.

 public static Map jsonToMap(JSONObject json) throws JSONException { Map retMap = new HashMap(); if(json != JSONObject.NULL) { retMap = toMap(json); } return retMap; } public static Map toMap(JSONObject object) throws JSONException { Map map = new HashMap(); Iterator keysItr = object.keys(); while(keysItr.hasNext()) { String key = keysItr.next(); Object value = object.get(key); if(value instanceof JSONArray) { value = toList((JSONArray) value); } else if(value instanceof JSONObject) { value = toMap((JSONObject) value); } map.put(key, value); } return map; } public static List toList(JSONArray array) throws JSONException { List list = new ArrayList(); for(int i = 0; i < array.length(); i++) { Object value = array.get(i); if(value instanceof JSONArray) { value = toList((JSONArray) value); } else if(value instanceof JSONObject) { value = toMap((JSONObject) value); } list.add(value); } return list; } 

Usando GSon , puoi fare quanto segue:

 Map retMap = new Gson().fromJson( jsonString, new TypeToken>() {}.getType() ); 

Spero che questo funzionerà, prova questo:

 import com.fasterxml.jackson.databind.ObjectMapper; Map response = new ObjectMapper().readValue(str, HashMap.class); 

str, la tua stringa JSON

Semplice come questo, se vuoi un email,

 String emailIds = response.get("email id").toString(); 

Ecco il codice di Vikas portato su JSR 353:

 import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.json.JsonArray; import javax.json.JsonException; import javax.json.JsonObject; public class JsonUtils { public static Map jsonToMap(JsonObject json) { Map retMap = new HashMap(); if(json != JsonObject.NULL) { retMap = toMap(json); } return retMap; } public static Map toMap(JsonObject object) throws JsonException { Map map = new HashMap(); Iterator keysItr = object.keySet().iterator(); while(keysItr.hasNext()) { String key = keysItr.next(); Object value = object.get(key); if(value instanceof JsonArray) { value = toList((JsonArray) value); } else if(value instanceof JsonObject) { value = toMap((JsonObject) value); } map.put(key, value); } return map; } public static List toList(JsonArray array) { List list = new ArrayList(); for(int i = 0; i < array.size(); i++) { Object value = array.get(i); if(value instanceof JsonArray) { value = toList((JsonArray) value); } else if(value instanceof JsonObject) { value = toMap((JsonObject) value); } list.add(value); } return list; } } 

Conversione di una stringa JSON in una mappa

 public static Map jsonString2Map( String jsonString ) throws JSONException{ Map keys = new HashMap(); org.json.JSONObject jsonObject = new org.json.JSONObject( jsonString ); // HashMap Iterator keyset = jsonObject.keys(); // HM while (keyset.hasNext()) { String key = (String) keyset.next(); Object value = jsonObject.get(key); System.out.print("\n Key : "+key); if ( value instanceof org.json.JSONObject ) { System.out.println("Incomin value is of JSONObject : "); keys.put( key, jsonString2Map( value.toString() )); }else if ( value instanceof org.json.JSONArray) { org.json.JSONArray jsonArray = jsonObject.getJSONArray(key); //JSONArray jsonArray = new JSONArray(value.toString()); keys.put( key, jsonArray2List( jsonArray )); } else { keyNode( value); keys.put( key, value ); } } return keys; } 

Conversione di array JSON in elenco

 public static List jsonArray2List( JSONArray arrayOFKeys ) throws JSONException{ System.out.println("Incoming value is of JSONArray : ========="); List array2List = new ArrayList(); for ( int i = 0; i < arrayOFKeys.length(); i++ ) { if ( arrayOFKeys.opt(i) instanceof JSONObject ) { Map subObj2Map = jsonString2Map(arrayOFKeys.opt(i).toString()); array2List.add(subObj2Map); }else if ( arrayOFKeys.opt(i) instanceof JSONArray ) { List subarray2List = jsonArray2List((JSONArray) arrayOFKeys.opt(i)); array2List.add(subarray2List); }else { keyNode( arrayOFKeys.opt(i) ); array2List.add( arrayOFKeys.opt(i) ); } } return array2List; } 

Visualizza JSON di qualsiasi formato

 public static void displayJSONMAP( Map allKeys ) throws Exception{ Set keyset = allKeys.keySet(); // HM$keyset if (! keyset.isEmpty()) { Iterator keys = keyset.iterator(); // HM$keysIterator while (keys.hasNext()) { String key = keys.next(); Object value = allKeys.get( key ); if ( value instanceof Map ) { System.out.println("\n Object Key : "+key); displayJSONMAP(jsonString2Map(value.toString())); }else if ( value instanceof List ) { System.out.println("\n Array Key : "+key); JSONArray jsonArray = new JSONArray(value.toString()); jsonArray2List(jsonArray); }else { System.out.println("key : "+key+" value : "+value); } } } } 

Google.gson a HashMap.

 import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.json.simple.JSONArray; import org.json.simple.JSONObject; public class JsonUtils { public static Map jsonToMap(JSONObject json) { Map retMap = new HashMap(); if(json != null) { retMap = toMap(json); } return retMap; } public static Map toMap(JSONObject object) { Map map = new HashMap(); Iterator keysItr = object.keySet().iterator(); while(keysItr.hasNext()) { String key = keysItr.next(); Object value = object.get(key); if(value instanceof JSONArray) { value = toList((JSONArray) value); } else if(value instanceof JSONObject) { value = toMap((JSONObject) value); } map.put(key, value); } return map; } public static List toList(JSONArray array) { List list = new ArrayList(); for(int i = 0; i < array.size(); i++) { Object value = array.get(i); if(value instanceof JSONArray) { value = toList((JSONArray) value); } else if(value instanceof JSONObject) { value = toMap((JSONObject) value); } list.add(value); } return list; } } 

Puoi utilizzare anche le API di Jackson per questo:

  final String json = "....your json..."; final ObjectMapper mapper = new ObjectMapper(); final MapType type = mapper.getTypeFactory().constructMapType( Map.class, String.class, Object.class); final Map data = mapper.readValue(json, type); 

Puoi convertire qualsiasi JSON da map usando la libreria di Jackson come di seguito:

 String json = "{\r\n\"name\" : \"abc\" ,\r\n\"email id \" : [\"[email protected]\",\"[email protected]\",\"[email protected]\"]\r\n}"; ObjectMapper mapper = new ObjectMapper(); Map map = new HashMap(); // convert JSON string to Map map = mapper.readValue(json, new TypeReference>() {}); System.out.println(map); 

Dipendenze di Maven per Jackson :

  com.fasterxml.jackson.core jackson-core 2.5.3 compile   com.fasterxml.jackson.core jackson-databind 2.5.3 compile  

Spero che questo ti sia d’aiuto. Felice codifica 🙂

prova questo codice:

  Map params = new HashMap(); try { Iterator keys = jsonObject.keys(); while (keys.hasNext()) { String key = (String) keys.next(); String value = jsonObject.getString(key); params.put(key, value); } } catch (Exception xx) { xx.toString(); } 

Immagina di avere una lista di email come sotto. non limitato a nessun linguaggio di programmazione,

 emailsList = ["[email protected]","[email protected]","[email protected]"] 

Ora segue il codice JAVA – per convertire JSON in mappa

 JSONObject jsonObj = new JSONObject().put("name","abc").put("email id",emailsList); Map s = jsonObj.getMap(); 

Puoi usare google gson library per convertire oggetti json.

https://code.google.com/p/google-gson/

Sono disponibili anche altri librerie come Jackson.

Questo non lo convertirà in una mappa. Ma puoi fare tutto ciò che vuoi.

Breve e utile:

 /** * @param jsonThing can be a JsonObject, a JsonArray, * a Boolean, a Number, * a null or a JSONObject.NULL. * @return Appropriate Java Object, that may be a Map, a List, * a Boolean, a Number or a null. */ public static Object jsonThingToAppropriateJavaObject(Object jsonThing) throws JSONException { if (jsonThing instanceof JSONArray) { final ArrayList list = new ArrayList<>(); final JSONArray jsonArray = (JSONArray) jsonThing; final int l = jsonArray.length(); for (int i = 0; i < l; ++i) list.add(jsonThingToAppropriateJavaObject(jsonArray.get(i))); return list; } if (jsonThing instanceof JSONObject) { final HashMap map = new HashMap<>(); final Iterator keysItr = ((JSONObject) jsonThing).keys(); while (keysItr.hasNext()) { final String key = keysItr.next(); map.put(key, jsonThingToAppropriateJavaObject(((JSONObject) jsonThing).get(key))); } return map; } if (JSONObject.NULL.equals(jsonThing)) return null; return jsonThing; } 

Grazie a @Vikas Gupta .

Il parser seguente legge un file, lo analizza in un JsonElement generico, utilizza il metodo JsonParser.parse di Google e quindi converte tutti gli elementi nel JSON generato in un List Java nativo List o Map .

Nota : il codice sottostante si basa sulla risposta di Vikas Gupta .

GsonParser.java

 import java.io.FileNotFoundException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonPrimitive; public class GsonParser { public static void main(String[] args) { try { print(loadJsonArray("data_array.json", true)); print(loadJsonObject("data_object.json", true)); } catch (Exception e) { e.printStackTrace(); } } public static void print(Object object) { System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(object).toString()); } public static Map loadJsonObject(String filename, boolean isResource) throws UnsupportedEncodingException, FileNotFoundException, JsonIOException, JsonSyntaxException, MalformsdURLException { return jsonToMap(loadJson(filename, isResource).getAsJsonObject()); } public static List loadJsonArray(String filename, boolean isResource) throws UnsupportedEncodingException, FileNotFoundException, JsonIOException, JsonSyntaxException, MalformsdURLException { return jsonToList(loadJson(filename, isResource).getAsJsonArray()); } private static JsonElement loadJson(String filename, boolean isResource) throws UnsupportedEncodingException, FileNotFoundException, JsonIOException, JsonSyntaxException, MalformsdURLException { return new JsonParser().parse(new InputStreamReader(FileLoader.openInputStream(filename, isResource), "UTF-8")); } public static Object parse(JsonElement json) { if (json.isJsonObject()) { return jsonToMap((JsonObject) json); } else if (json.isJsonArray()) { return jsonToList((JsonArray) json); } return null; } public static Map jsonToMap(JsonObject jsonObject) { if (jsonObject.isJsonNull()) { return new HashMap(); } return toMap(jsonObject); } public static List jsonToList(JsonArray jsonArray) { if (jsonArray.isJsonNull()) { return new ArrayList(); } return toList(jsonArray); } private static final Map toMap(JsonObject object) { Map map = new HashMap(); for (Entry pair : object.entrySet()) { map.put(pair.getKey(), toValue(pair.getValue())); } return map; } private static final List toList(JsonArray array) { List list = new ArrayList(); for (JsonElement element : array) { list.add(toValue(element)); } return list; } private static final Object toPrimitive(JsonPrimitive value) { if (value.isBoolean()) { return value.getAsBoolean(); } else if (value.isString()) { return value.getAsString(); } else if (value.isNumber()){ return value.getAsNumber(); } return null; } private static final Object toValue(JsonElement value) { if (value.isJsonNull()) { return null; } else if (value.isJsonArray()) { return toList((JsonArray) value); } else if (value.isJsonObject()) { return toMap((JsonObject) value); } else if (value.isJsonPrimitive()) { return toPrimitive((JsonPrimitive) value); } return null; } } 

FileLoader.java

 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.net.MalformsdURLException; import java.net.URISyntaxException; import java.net.URL; import java.util.Scanner; public class FileLoader { public static Reader openReader(String filename, boolean isResource) throws UnsupportedEncodingException, FileNotFoundException, MalformsdURLException { return openReader(filename, isResource, "UTF-8"); } public static Reader openReader(String filename, boolean isResource, String charset) throws UnsupportedEncodingException, FileNotFoundException, MalformsdURLException { return new InputStreamReader(openInputStream(filename, isResource), charset); } public static InputStream openInputStream(String filename, boolean isResource) throws FileNotFoundException, MalformsdURLException { if (isResource) { return FileLoader.class.getClassLoader().getResourceAsStream(filename); } return new FileInputStream(load(filename, isResource)); } public static String read(String path, boolean isResource) throws IOException { return read(path, isResource, "UTF-8"); } public static String read(String path, boolean isResource, String charset) throws IOException { return read(pathToUrl(path, isResource), charset); } @SuppressWarnings("resource") protected static String read(URL url, String charset) throws IOException { return new Scanner(url.openStream(), charset).useDelimiter("\\A").next(); } protected static File load(String path, boolean isResource) throws MalformsdURLException { return load(pathToUrl(path, isResource)); } protected static File load(URL url) { try { return new File(url.toURI()); } catch (URISyntaxException e) { return new File(url.getPath()); } } private static final URL pathToUrl(String path, boolean isResource) throws MalformsdURLException { if (isResource) { return FileLoader.class.getClassLoader().getResource(path); } return new URL("file:/" + path); } } 

Usando json-simple puoi convertire i dati JSON in Map e Map in JSON.

 try { JSONObject obj11 = new JSONObject(); obj11.put(1, "Kishan"); obj11.put(2, "Radhesh"); obj11.put(3, "Sonal"); obj11.put(4, "Madhu"); Map map = new HashMap(); obj11.toJSONString(); map = obj11; System.out.println(map.get(1)); JSONObject obj12 = new JSONObject(); obj12 = (JSONObject) map; System.out.println(obj12.get(1)); } catch(Exception e) { System.err.println("EROR : 01 :"+e); }