Come convertire jsonString in JSONObject in Java

Ho una variabile String chiamata jsonString :

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

Ora voglio convertirlo in JSON Object. Ho cercato di più su Google ma non ho ottenuto alcuna risposta prevista …

Utilizzando la libreria org.json :

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

A chiunque ancora cerchi una risposta:

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

Puoi usare google-gson . Dettagli:

Esempi di oggetti

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

(Serializzazione)

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

Si noti che non è ansible serializzare oggetti con riferimenti circolari poiché ciò comporterà una ricorsione infinita.

(Deserializzazione)

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

Un altro esempio di Gson:

Gson è facile da imparare e implementare, è necessario conoscere i seguenti due metodi:

-> toJson () – converte l’object java nel formato JSON

-> fromJson () – converte JSON in object 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); } } 

Produzione

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

risorse:

Home page di Google Gson Project

Guida dell’utente di Gson

Esempio

Esistono vari serializzatori e deserializzatori Java JSON collegati dalla home page JSON .

Al momento della stesura di questo, ci sono questi 20:

  • org.json
  • org.json.me
  • Jackson JSON Processor
  • JSON-lib
  • Strumenti JSON
  • JSON-semplice
  • Stringtree
  • SOJO
  • Restlet
  • gettare a mare
  • JSON-taglib
  • XStream
  • JsonMarshaller
  • Flexjson
  • Strumenti JON
  • google-GSON
  • Argo
  • Perno
  • jsonij
  • fastjson

… ma ovviamente la lista può cambiare.

Soluzione Java 7

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

;

Mi piace usare google-gson per questo, ed è proprio perché non ho bisogno di lavorare direttamente con JSONObject.

In tal caso avrei una class che corrisponderà alle proprietà del tuo object 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); ... 

Tuttavia, penso che la tua domanda sia più simile a Come faccio a finire con un object JSONObject reale da una stringa JSON.

Stavo guardando l’API di google-json e non ho trovato nulla di semplice come l’API di org.json che è probabilmente quello che vuoi usare se hai così tanto bisogno di usare un JSONObject barebone.

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

Con org.json.JSONObject (un’altra API completamente diversa) Se vuoi fare qualcosa come …

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

Penso che la bellezza di google-gson sia che non devi occuparti di JSONObject. Devi solo prendere JSON, passare la class a cui vuoi deserializzare, e gli attributi della tua class saranno abbinati al JSON, ma poi ancora, ognuno ha i suoi requisiti, forse non puoi permetterti il ​​lusso di avere classi pre-mappate su il lato deserializzante perché le cose potrebbero essere troppo dinamiche sul lato JSON Generating. In tal caso basta usare json.org.

devi importare org.json

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

Per convertire String in JSONObject è sufficiente passare l’istanza String in Constructor of JSONObject .

Per esempio:

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

Se stai usando http://json-lib.sourceforge.net (net.sf.json.JSONObject)

è abbastanza facile:

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

o

 JSONObject json = JSONSerializer.toJSON(myJsonString); 

ottenere i valori quindi con json.getString (param), json.getInt (param) e così via.

Usa JsonNode di fasterxml per il Generic Json Parsing. Crea internamente una mappa di valore chiave per tutti gli input.

Esempio:

 private void test(@RequestBody JsonNode node) 

stringa di input:

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

Per convertire una stringa in JSON e la puntura è come 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); 

Per impostare json single object to list ie

 "locations":{ } 

in List

uso

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

jackson.mapper-asl-1.9.7.jar

NOTA che GSON con deserializzazione di un’interfaccia risulterà in un’eccezione come di seguito.

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

Mentre si deserializza; GSON non sa quale object deve essere intantiated per quell’interfaccia.

Questo è risolto in qualche modo qui .

Tuttavia FlexJSON ha questa soluzione intrinsecamente. mentre serializza il tempo sta aggiungendo il nome della class come parte di json come sotto.

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

Quindi JSON ne sarà un po ‘occupato; ma non è necessario scrivere InstanceCreator che è richiesto in GSON.

Non è necessario utilizzare alcuna libreria esterna.

Puoi usare questa class invece 🙂 (gestisce anche elenchi, elenchi annidati e 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; } } 

Per convertire la tua stringa JSON in hashmap, usa questo:

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

Meglio andare con un modo più semplice usando org.json lib. Basta fare un approccio molto semplice come di seguito:

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

Ora obj è il tuo modulo JSONObject convertito della tua rispettiva stringa. Questo è nel caso in cui si hanno coppie nome-valore.

Per una stringa puoi passare direttamente al costruttore di JSONObject . Se sarà una json String valida, allora va bene altrimenti genererà un’eccezione.