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.
Hay varios serializadores y deserializadores JSON de Java vinculados desde la página de inicio de JSON .
A partir de este escrito, hay estos 20:
- org.json
- org.json.me
- Procesador Jackson JSON
- Json-lib
- Herramientas json
- json-simple
- Stringtree
- SOJO
- Restlet
- Jettison
- json-taglib
- XStream
- JsonMarshaller
- Flexjson
- Herramientas jon
- google-gson
- Argo
- Pivot
- jsonij
- fastjson
... pero por supuesto la lista puede cambiar.
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:
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()
;