Cómo convertir jsonString a JSONObject en Java

Tengo la variable String llamada jsonString :

 {"phonetype":"N95","cat":"WP"} 

Ahora quiero convertirlo en objeto JSON. Busqué más en Google pero no obtuve ninguna respuesta esperada …

Usando la biblioteca org.json :

 JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}"); 

Para cualquiera que todavía esté buscando una respuesta:

 JSONParser parser = new JSONParser(); JSONObject json = (JSONObject) parser.parse(stringToParse); 

Puedes usar google-gson . Detalles:

Ejemplos de objetos

 class BagOfPrimitives { private int value1 = 1; private String value2 = "abc"; private transient int value3 = 3; BagOfPrimitives() { // no-args constructor } } 

(Publicación por entregas)

 BagOfPrimitives obj = new BagOfPrimitives(); Gson gson = new Gson(); String json = gson.toJson(obj); ==> json is {"value1":1,"value2":"abc"} 

Tenga en cuenta que no puede serializar objetos con referencias circulares ya que eso dará como resultado una recursión infinita.

(Deserialización)

 BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class); ==> obj2 is just like obj 

Otro ejemplo para Gson:

Gson es fácil de aprender e implementar, debe saber cuáles son los dos métodos siguientes:

-> toJson () – convierte el objeto java a formato JSON

-> fromJson () – convierte JSON en objeto java

 import com.google.gson.Gson; public class TestObjectToJson { private int data1 = 100; private String data2 = "hello"; public static void main(String[] args) { TestObjectToJson obj = new TestObjectToJson(); Gson gson = new Gson(); //convert java object to JSON format String json = gson.toJson(obj); System.out.println(json); } } 

Salida

 {"data1":100,"data2":"hello"} 

Recursos:

Página de inicio del proyecto Google Gson

Guía del usuario de Gson

Ejemplo

Hay varios serializadores y deserializadores Java JSON vinculados desde la página de inicio de JSON .

Al escribir estas líneas, hay estos 20:

  • org.json
  • org.json.me
  • Jackson JSON Processor
  • Json-lib
  • Herramientas JSON
  • json-simple
  • Stringtree
  • SOJO
  • Restlet
  • Echazón
  • json-taglib
  • XStream
  • JsonMarshaller
  • Flexjson
  • Herramientas JON
  • google-gson
  • Argo
  • Pivote
  • jsonij
  • fastjson

… pero, por supuesto, la lista puede cambiar.

Solución Java 7

 import javax.json.*; ... String TEXT; JsonObject body = Json.createReader(new StringReader(TEXT)).readObject() 

;

Me gusta usar google-gson para esto, y es precisamente porque no necesito trabajar directamente con JSONObject.

En ese caso, tendría una clase que correspondería a las propiedades de tu objeto JSON

 class Phone { public String phonetype; public String cat; } ... String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}"; Gson gson = new Gson(); Phone fooFromJson = gson.fromJson(jsonString, Phone.class); ... 

Sin embargo, creo que su pregunta es más como, ¿cómo puedo terminar con un objeto JSONObject real de una cadena JSON.

Estaba mirando la API de Google-json y no pude encontrar nada tan sencillo como la API de org.json, que probablemente es lo que quieres usar si necesitas con urgencia usar un JSONObject barebones.

http://www.json.org/javadoc/org/json/JSONObject.html

Con org.json.JSONObject (otra API completamente diferente) Si quieres hacer algo como …

 JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}"); System.out.println(jsonObject.getString("phonetype")); 

Creo que la belleza de google-gson es que no necesitas tratar con JSONObject. Simplemente toma json, aprueba la clase para deserializarla, y tus atributos de clase se combinarán con el JSON, pero nuevamente, cada uno tiene sus propios requisitos, tal vez no puedas permitirte el lujo de tener clases premapeadas en el lado deserializador porque las cosas pueden ser demasiado dinámicas en el lado de Generación JSON. En ese caso, solo use json.org.

debes importar org.json

 JSONObject jsonObj = null; try { jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}"); } catch (JSONException e) { e.printStackTrace(); } 

Para convertir String en JSONObject solo necesita pasar la instancia de String al Constructor de JSONObject .

P.ej:

 JSONObject jsonObj = new JSONObject("your string"); 

Si está usando http://json-lib.sourceforge.net (net.sf.json.JSONObject)

es bastante fácil:

 String myJsonString; JSONObject json = JSONObject.fromObject(myJsonString); 

o

 JSONObject json = JSONSerializer.toJSON(myJsonString); 

obtener los valores con json.getString (param), json.getInt (param) y así sucesivamente.

Use JsonNode of fasterxml para el análisis genérico de Json. Crea internamente un Mapa de valor clave para todas las entradas.

Ejemplo:

 private void test(@RequestBody JsonNode node) 

cadena de entrada:

 {"a":"b","c":"d"} 

Para convertir una cadena en json y el aguijón es como JSON. {“phonetype”: “N95”, “cat”: “WP”}

 String Data=response.getEntity().getText().toString(); // reading the string value JSONObject json = (JSONObject) new JSONParser().parse(Data); String x=(String) json.get("phonetype"); System.out.println("Check Data"+x); String y=(String) json.get("cat"); System.out.println("Check Data"+y); 

Para configurar json solo objeto a la lista, es decir

 "locations":{ } 

en la List

utilizar

 ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); 

jackson.mapper-asl-1.9.7.jar

NOTA que GSON con la deserialización de una interfaz dará como resultado una excepción como la siguiente.

 "java.lang.RuntimeException: Unable to invoke no-args constructor for interface XXX. Register an InstanceCreator with Gson for this type may fix this problem." 

Mientras deserializa; GSON no sabe qué objeto debe ser intantado para esa interfaz.

Esto se resuelve de alguna manera aquí .

Sin embargo, FlexJSON tiene esta solución inherentemente. mientras serializa el tiempo, agrega el nombre de la clase como parte de json, como se muestra a continuación.

 { "HTTPStatus": "OK", "class": "com.XXX.YYY.HTTPViewResponse", "code": null, "outputContext": { "class": "com.XXX.YYY.ZZZ.OutputSuccessContext", "eligible": true } } 

Entonces, JSON se molestará un poco; pero no necesita escribir InstanceCreator que se requiere en GSON.

No es necesario usar ninguna biblioteca externa.

Puede usar esta clase en su lugar 🙂 (maneja listas uniformes, listas anidadas y json)

 public class Utility { public static Map jsonToMap(Object json) throws JSONException { if(json instanceof JSONObject) return _jsonToMap_((JSONObject)json) ; else if (json instanceof String) { JSONObject jsonObject = new JSONObject((String)json) ; return _jsonToMap_(jsonObject) ; } return null ; } private static Map _jsonToMap_(JSONObject json) throws JSONException { Map retMap = new HashMap(); if(json != JSONObject.NULL) { retMap = toMap(json); } return retMap; } private 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; } } 

Para convertir su cadena JSON en hashmap, use esto:

 HashMap hashMap = new HashMap<>(Utility.jsonToMap( 

Mejor ir con una forma más simple usando org.json lib. Simplemente haga un enfoque muy simple como a continuación:

 JSONObject obj = new JSONObject(); obj.put("phonetype", "N95"); obj.put("cat", "WP"); 

Ahora obj es tu forma JSONObject convertida de tu String respectivo. Esto es en caso de que tenga pares nombre-valor.

Para una cadena, puede pasar directamente al constructor de JSONObject . Si va a ser un json String válido, entonces está bien, de lo contrario arrojará una excepción.