No, está bien, porque quería crear un objeto json a partir de una cadena json, la respuesta dada por dogbane mostró el camino correcto para responder.
Sr. Sajid Shaikh
Ambas respuestas de Mappan y dogbane son correctas, pero utilizan módulos diferentes. Debe tener cuidado al importar el módulo correcto para cada uno porque hay muchos módulos JSONObject.
Arashsoft
Lo intenté con la biblioteca GSON. Por favor revise este enlace .
¿Y puede mencionar qué paquete importar para el mismo?
idophishing
10
Esto está funcionando para mí con:import org.json.simple.JSONObject
Mafro34
1
La versión 1.1.1 de json-simple parece tener algún problema. Lo anterior proporciona "Excepción no controlada" parser.parse(y quiere try-catch o throws. Pero cuando agrega cualquiera de los dos, da un Unhandled exception type ParseExceptionerror o un error NoClassDefFound para ParseException org.json.simple.parserincluso cuando tiene json-simple en dependencias de Maven y claramente visible en la biblioteca del proyecto.
Juha Untinen
2
org.json es una biblioteca de prueba de concepto. Es uno de los peores en términos de rendimiento y características. Uno debe mirar el conjunto de características y el rendimiento de una json lib antes de elegir. Vea este punto de referencia que hice usando JMH: github.com/fabienrenaud/java-json-benchmark Muestra claramente a Jackson más rápido que cualquier otra cosa y de 5 a 6 veces más rápido que org.json.
fabien
55
Analizador JSONParser = nuevo JSONParser (); parece depricated
"Si solicita procesar en el lado del cliente, depende de su lenguaje de programación. Por ejemplo, con Java puede usar google-gson" Creo que probablemente quiso decir "servidor" en lugar de "cliente" allí. Y él etiquetó su pregunta "Java".
TJ Crowder
+1. He usado Gson en 4-5 proyectos ahora, en contextos muy diferentes, del lado del servidor y del cliente (también en la aplicación de Android), y nunca me ha fallado. Muy bonita y limpia lib.
Jonik
Si desea usar gson pero no tiene una clase POJO predefinida (es decir, tiene un json genérico sin una estructura predefinida), esta respuesta puede ayudar - stackoverflow.com/questions/4110664/…
Leandro David
40
Hay varios serializadores y deserializadores Java JSON vinculados desde la página de inicio de JSON .
Sin embargo, creo que su pregunta es más como, ¿Cómo termino con un objeto JSONObject real de una cadena JSON?
Estaba mirando la api de google-json y no pude encontrar nada tan directo como la api de org.json, que es probablemente lo que quieres usar si necesitas usar un JSONObject básico.
Creo que la belleza de google-gson es que no necesitas tratar con JSONObject. Simplemente agarra json, pasa la clase en la que quieres deserializar y tus atributos de clase coincidirán con el JSON, pero, de nuevo, todos tienen sus propios requisitos, tal vez no puedas permitirte el lujo de tener clases pre-mapeadas en el lado deserializador porque las cosas pueden ser demasiado dinámicas en el lado generador de JSON. En ese caso, solo use json.org.
(2) Convertir cadena JSON a objeto JSON (JsonNode)
publicstaticJsonNode stringToJSONObject(String jsonString)throwsException{ObjectMapper jacksonObjMapper =newObjectMapper();return jacksonObjMapper.readTree(jsonString);}//Example:String jsonString ="{\"phonetype\":\"N95\",\"cat\":\"WP\"}";JsonNode jsonNode = stringToJSONObject(jsonString);Assert.assertEquals("Phonetype value not legit!","N95", jsonNode.get("phonetype").getTextValue());Assert.assertEquals("Cat value is tragic!","WP", jsonNode.get("cat").getTextValue());
TENGA EN CUENTA 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 se deserializa; GSON no sabe qué objeto debe ser identificado para esa interfaz.
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.
Ahora objes su JSONObjectforma convertida de su respectiva cadena. Esto es así si tiene pares nombre-valor.
Para una cadena, puede pasar directamente al constructor de JSONObject. Si será válido json String, entonces está bien, de lo contrario arrojará una excepción.
Respuestas:
Usando la biblioteca org.json :
fuente
JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
Para cualquiera que todavía busque una respuesta:
fuente
import org.json.simple.JSONObject
parser.parse(
y quiere try-catch o throws. Pero cuando agrega cualquiera de los dos, da unUnhandled exception type ParseException
error o un error NoClassDefFound para ParseExceptionorg.json.simple.parser
incluso cuando tiene json-simple en dependencias de Maven y claramente visible en la biblioteca del proyecto.Puedes usar
google-gson
. Detalles:Ejemplos de objetos
(Publicación por entregas)
Tenga en cuenta que no puede serializar objetos con referencias circulares ya que eso dará como resultado una recursión infinita.
(Deserialización)
Otro ejemplo para Gson:
Gson es fácil de aprender e implementar, debe saber cuáles son los dos métodos siguientes:
-> toJson () - convierte objetos java a formato JSON
-> fromJson () - convierte JSON en objeto java
Salida
Recursos:
Página de inicio del proyecto Google Gson
Guía del usuario de Gson
Ejemplo
fuente
Hay varios serializadores y deserializadores Java JSON vinculados desde la página de inicio de JSON .
Al momento de escribir esto, existen estos 22:
... pero, por supuesto, la lista puede cambiar.
fuente
Solución Java 7
;
fuente
Para convertir
String
enJSONObject
sólo tiene que pasar a laString
instancia en Constructor deJSONObject
.P.ej:
fuente
Me gusta usar google-gson para esto, y es precisamente porque no necesito trabajar con JSONObject directamente.
En ese caso, tendría una clase que correspondería a las propiedades de su objeto JSON
Sin embargo, creo que su pregunta es más como, ¿Cómo termino con un objeto JSONObject real de una cadena JSON?
Estaba mirando la api de google-json y no pude encontrar nada tan directo como la api de org.json, que es probablemente lo que quieres usar si necesitas usar un JSONObject básico.
http://www.json.org/javadoc/org/json/JSONObject.html
Con org.json.JSONObject (otra API completamente diferente) Si quieres hacer algo como ...
Creo que la belleza de google-gson es que no necesitas tratar con JSONObject. Simplemente agarra json, pasa la clase en la que quieres deserializar y tus atributos de clase coincidirán con el JSON, pero, de nuevo, todos tienen sus propios requisitos, tal vez no puedas permitirte el lujo de tener clases pre-mapeadas en el lado deserializador porque las cosas pueden ser demasiado dinámicas en el lado generador de JSON. En ese caso, solo use json.org.
fuente
debes importar org.json
fuente
Cadena a JSON usando
Jackson
concom.fasterxml.jackson.databind
:Suponiendo que su cadena json representa así: jsonString = {"phonetype": "N95", "cat": "WP"}
fuente
Si está utilizando http://json-lib.sourceforge.net (net.sf.json.JSONObject)
es bastante facil:
o
obtenga los valores luego con json.getString (param), json.getInt (param) y así sucesivamente.
fuente
Para convertir una cadena a json y la picadura es como json. {"phonetype": "N95", "cat": "WP"}
fuente
Utilice JsonNode de rapidxml para el análisis genérico de Json. Crea internamente un Mapa de valores clave para todas las entradas.
Ejemplo:
cadena de entrada:
fuente
No es necesario usar ninguna biblioteca externa.
Puede usar esta clase en su lugar :) (maneja incluso listas, listas anidadas y json)
Para convertir su cadena JSON a hashmap use esto:
fuente
Codehaus Jackson : he sido esta increíble API desde 2012 para mi servicio web RESTful y las pruebas JUnit. Con su API, puedes:
(1) Convertir cadena JSON a Java Bean
(2) Convertir cadena JSON a objeto JSON (JsonNode)
(3) Convertir Java Bean a JSON String
REFS:
Codehaus Jackson
API de JsonNode : cómo usar, navegar, analizar y evaluar valores de un objeto JsonNode
Tutorial : tutorial simple sobre cómo usar Jackson para convertir cadenas JSON a JsonNode
fuente
TENGA EN CUENTA que GSON con la deserialización de una interfaz dará como resultado una excepción como la siguiente.
Mientras se deserializa; GSON no sabe qué objeto debe ser identificado 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.
Entonces JSON será un poco engorroso; pero no necesita escribir lo
InstanceCreator
que se requiere en GSON.fuente
Usando org.json
Si tiene una cadena que contiene texto en formato JSON, puede obtener un objeto JSON siguiendo estos pasos:
Ahora para acceder al tipo de teléfono
fuente
Para configurar json solo objeto a la lista, es decir
dentro
List<Location>
utilizar
jackson.mapper-asl-1.9.7.jar
fuente
fuente
Mejor Ve con una forma más simple usando
org.json
lib. Simplemente haga un enfoque muy simple como a continuación:Ahora
obj
es suJSONObject
forma convertida de su respectiva cadena. Esto es así si tiene pares nombre-valor.Para una cadena, puede pasar directamente al constructor de
JSONObject
. Si será válidojson String
, entonces está bien, de lo contrario arrojará una excepción.fuente
user.put("email", "[email protected]")
desencadena una excepción no controlada.try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}