with servlet leer example java json gson json-simple

java - servlet - parsing json with gson example



¿Cómo encontrar el nombre especificado y su valor en la cadena JSON de Java? (4)

Supongamos que tenemos la siguiente cadena JSON:

{ "name" : "John", "age" : "20", "address" : "some address", "someobject" : { "field" : "value" } }

¿Cuál es la forma más fácil (pero aún correcta, es decir, que las expresiones regulares no son aceptables) para encontrar la age campo y su valor (o determinar que no hay un campo con el nombre)?

ps cualquier libs de código abierto están bien.

ps2: por favor, no publique enlaces a las bibliotecas, no es una respuesta útil. ''Muéstrame el código'' (c).


Creo que usar el código del sitio web de JSON suele ser una buena idea. Si te gusta Maven, esto es para ti:

<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20090211</version> </dependency>


Estoy de acuerdo en que Gson de Google es claro y fácil de usar. Pero debe crear una clase de resultados para obtener una instancia de la cadena JSON. Si no puede aclarar la clase de resultados, use json-simple :

// import static org.hamcrest.CoreMatchers.is; // import static org.junit.Assert.assertThat; // import org.json.simple.JSONObject; // import org.json.simple.JSONValue; // import org.junit.Test; @Test public void json2Object() { // given String jsonString = "{/"name/" : /"John/",/"age/" : /"20/"," + "/"address/" : /"some address/"," + "/"someobject/" : {/"field/" : /"value/"}}"; // when JSONObject object = (JSONObject) JSONValue.parse(jsonString); // then @SuppressWarnings("unchecked") Set<String> keySet = object.keySet(); for (String key : keySet) { Object value = object.get(key); System.out.printf("%s=%s (%s)/n", key, value, value.getClass() .getSimpleName()); } assertThat(object.get("age").toString(), is("20")); }

Las ventajas y desventajas de Gson y json-simple son muy parecidas a las ventajas y desventajas del objeto y Map Java definidos por el usuario. El objeto que define es claro para todos los campos (nombre y tipo), pero menos flexible que el Map .


Gson permite una de las soluciones más simples posibles. En comparación con API similares como Jackson o svenson, Gson por defecto ni siquiera necesita que los elementos JSON no utilizados tengan enlaces disponibles en la estructura de Java. Específico a la pregunta formulada, aquí está una solución de trabajo.

import com.google.gson.Gson; public class Foo { static String jsonInput = "{" + "/"name/":/"John/"," + "/"age/":/"20/"," + "/"address/":/"some address/"," + "/"someobject/":" + "{" + "/"field/":/"value/"" + "}" + "}"; String age; public static void main(String[] args) throws Exception { Gson gson = new Gson(); Foo thing = gson.fromJson(jsonInput, Foo.class); if (thing.age != null) { System.out.println("age is " + thing.age); } else { System.out.println("age element not present or value is null"); } } }


Utilice una biblioteca JSON para analizar la cadena y recuperar el valor.

El siguiente ejemplo, muy básico, utiliza el analizador JSON incorporado de Android.

String jsonString = "{ /"name/" : /"John/", /"age/" : /"20/", /"address/" : /"some address/" }"; JSONObject jsonObject = new JSONObject(jsonString); int age = jsonObject.getInt("age");

Las bibliotecas JSON más avanzadas, como jackson , google-gson , json-io o genson , le permiten convertir objetos JSON a objetos Java directamente.