Converter uma string JSON em um hashmap

Estou usando Java e tenho uma String que é JSON:

{ "name" : "abc" , "email id " : ["abc@gmail.com","def@gmail.com","ghi@gmail.com"] } 

Então meu mapa em Java:

 Map retMap = new HashMap(); 

Eu quero armazenar todos os dados do JSONObject nesse HashMap.

Alguém pode fornecer código para isso? Eu quero usar a biblioteca org.json .

Eu escrevi este código alguns dias atrás por recursion.

 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 o GSon , você pode fazer o seguinte:

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

Espero que isso funcione, tente isto:

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

str, sua string JSON

Tão simples como isso, se você quer emailid,

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

Aqui está o código de Vikas portado para 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; } } 

Convertendo uma string JSON no mapa

 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; } 

Convertendo o JSON Array para List

 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; } 

Mostrar JSON de qualquer 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 para 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; } } 

Você pode usar a API Jackson também para isso:

  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); 

Você pode converter qualquer JSON para map usando a biblioteca Jackson como abaixo:

 String json = "{\r\n\"name\" : \"abc\" ,\r\n\"email id \" : [\"abc@gmail.com\",\"def@gmail.com\",\"ghi@gmail.com\"]\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); 

Dependências de Maven para Jackson :

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

Espero que isso ajude. Codificação feliz 🙂

tente este código:

  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(); } 

Imagine que você tenha uma lista de e-mails como abaixo. não restrito a qualquer linguagem de programação,

 emailsList = ["abc@gmail.com","def@gmail.com","ghi@gmail.com"] 

Agora a seguir é o código JAVA – para converter json para mapear

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

Você pode usar a biblioteca do google gson para converter o object json.

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

Outras bibliotecas como Jackson também estão disponíveis.

Isso não irá convertê-lo em um mapa. Mas você pode fazer todas as coisas que quiser.

Breve e Útil:

 /** * @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; } 

Obrigado @Vikas Gupta .

O analisador a seguir lê um arquivo, analisa-o em um JsonElement genérico, usando o método JsonParser.parse do Google e, em seguida, converte todos os itens no JSON gerado em uma List nativa Java List ou Map .

Nota : O código abaixo é baseado na resposta de 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, MalformedURLException { return jsonToMap(loadJson(filename, isResource).getAsJsonObject()); } public static List loadJsonArray(String filename, boolean isResource) throws UnsupportedEncodingException, FileNotFoundException, JsonIOException, JsonSyntaxException, MalformedURLException { return jsonToList(loadJson(filename, isResource).getAsJsonArray()); } private static JsonElement loadJson(String filename, boolean isResource) throws UnsupportedEncodingException, FileNotFoundException, JsonIOException, JsonSyntaxException, MalformedURLException { 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.MalformedURLException; 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, MalformedURLException { return openReader(filename, isResource, "UTF-8"); } public static Reader openReader(String filename, boolean isResource, String charset) throws UnsupportedEncodingException, FileNotFoundException, MalformedURLException { return new InputStreamReader(openInputStream(filename, isResource), charset); } public static InputStream openInputStream(String filename, boolean isResource) throws FileNotFoundException, MalformedURLException { 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 MalformedURLException { 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 MalformedURLException { if (isResource) { return FileLoader.class.getClassLoader().getResource(path); } return new URL("file:/" + path); } } 

Usando o json-simple, você pode converter dados JSON em Mapear e Mapear em 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); }