simple read parse leer jsonarray example array java arrays json parsing

parse - read json file java



Cómo convertir jsonString a JSONObject en Java (15)

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

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

Tengo variable de cadena llamada jsonString :

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

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


Better Go de una forma más sencilla utilizando 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 cadena respectiva. Esto es en caso de que si tiene pares nombre-valor.

Para una cadena, puede pasar directamente al constructor de JSONObject . Si será una json String válida, está bien, de lo contrario lanzará una excepción.



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 las propiedades de su 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 termino con un objeto JSONObject real de una cadena JSON?

Estaba buscando en la API de google-json y no pude encontrar nada tan sencillo como la API de org.json, que es probablemente lo que quieres usar si tienes tanta necesidad de utilizar un JSONObject de 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 lidiar con JSONObject. Simplemente toma json, pasa la clase para querer deserializar y tus atributos de clase se combinarán con el JSON, pero, de nuevo, todos tienen sus propios requisitos, tal vez no puedas permitirte el lujo de tener clases asignadas previamente en el lado de deserialización porque las cosas pueden ser demasiado dinámicas en el lado de Generación JSON. En ese caso solo usa json.org.


No es necesario utilizar ninguna biblioteca externa.

Puedes usar esta clase en su lugar :) (maneja incluso listas, listas anidadas y json)

public class Utility { public static Map<String, Object> 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<String, Object> _jsonToMap_(JSONObject json) throws JSONException { Map<String, Object> retMap = new HashMap<String, Object>(); if(json != JSONObject.NULL) { retMap = toMap(json); } return retMap; } private static Map<String, Object> toMap(JSONObject object) throws JSONException { Map<String, Object> map = new HashMap<String, Object>(); Iterator<String> 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<Object> toList(JSONArray array) throws JSONException { List<Object> list = new ArrayList<Object>(); 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 a hashmap use esto:

HashMap<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(


Para configurar json solo objeto a la lista, es decir

"locations":{ }

en la List<Location>

utilizar

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

jackson.mapper-asl-1.9.7.jar


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

P.ej:

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


Para convertir una cadena a json y la cadena 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);


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 esto resultará en 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, lo que necesita saber es los siguientes dos métodos:

-> toJson () - convierte el objeto java al 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

Gson User Guide

Example


Si está utilizando Json-lib (net.sf.json.JSONObject)

es bastante facil

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

o

JSONObject json = JSONSerializer.toJSON(myJsonString);

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


TENGA EN CUENTA que GSON con la deserialización de una interfaz resultará en 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 intentado para esa interfaz.

Esto se resuelve de alguna manera here .

Sin embargo, Flexjson tiene esta solución inherentemente. mientras se serializa el tiempo, se 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 } }

Así que JSON será un poco más; pero no necesita escribir InstanceCreator que se requiere en GSON.


Usando la librería org.json :

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


Use JsonNode de fasterxml para el Json Parsing genérico. 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"}


debes importar org.json

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


Solución de Java 7

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

;