Come accedere agli elementi nidificati dell’object json usando il metodo getJSONArray

Ho una risposta JSON simile a questa:

{ "result": { "map": { "entry": [ { "key": { "@xsi.type": "xs:string", "$": "ContentA" }, "value": "fsdf" }, { "key": { "@xsi.type": "xs:string", "$": "ContentB" }, "value": "dfdf" } ] } } } 

Voglio accedere al valore dell’object matrice "entry" . Sto cercando di accedere a:

 RESPONSE_JSON_OBJECT.getJSONArray("entry"); 

Sto ricevendo JSONException . Qualcuno può aiutarmi a ottenere l’array JSON dalla suddetta risposta JSON?

È necessario scomporre l’object completo per raggiungere l’array di entry .

Supponendo che REPONSE_JSON_OBJECT sia già un object JSONObject analizzato.

 REPONSE_JSON_OBJECT.getJSONObject("result") .getJSONObject("map") .getJSONArray("entry"); 

Ti suggerisco di usare la libreria Gson . Permette di analizzare la stringa JSON nel modello di dati dell’object. Per favore, vedi il mio esempio:

 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.SerializedName; public class GsonProgram { public static void main(String... args) { String response = "{\"result\":{\"map\":{\"entry\":[{\"key\":{\"@xsi.type\":\"xs:string\",\"$\":\"ContentA\"},\"value\":\"fsdf\"},{\"key\":{\"@xsi.type\":\"xs:string\",\"$\":\"ContentB\"},\"value\":\"dfdf\"}]}}}"; Gson gson = new GsonBuilder().serializeNulls().create(); Response res = gson.fromJson(response, Response.class); System.out.println("Entries: " + res.getResult().getMap().getEntry()); } } class Response { private Result result; public Result getResult() { return result; } public void setResult(Result result) { this.result = result; } @Override public String toString() { return result.toString(); } } class Result { private MapNode map; public MapNode getMap() { return map; } public void setMap(MapNode map) { this.map = map; } @Override public String toString() { return map.toString(); } } class MapNode { List entry = new ArrayList(); public List getEntry() { return entry; } public void setEntry(List entry) { this.entry = entry; } @Override public String toString() { return Arrays.toString(entry.toArray()); } } class Entry { private Key key; private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public Key getKey() { return key; } public void setKey(Key key) { this.key = key; } @Override public String toString() { return "[key=" + key + ", value=" + value + "]"; } } class Key { @SerializedName("$") private String value; @SerializedName("@xsi.type") private String type; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getType() { return type; } public void setType(String type) { this.type = type; } @Override public String toString() { return "[value=" + value + ", type=" + type + "]"; } } 

Uscita del programma:

 Entries: [[key=[value=ContentA, type=xs:string], value=fsdf], [key=[value=ContentB, type=xs:string], value=dfdf]] 

Se non conosci questa libreria, puoi trovare molte informazioni in ” Guida dell’utente di Gson “.

Prova questo codice usando la libreria Gson e fai le cose.

 Gson gson = new GsonBuilder().create(); JsonObject job = gson.fromJson(JsonString, JsonObject.class); JsonElement entry=job.getAsJsonObject("results").getAsJsonObject("map").getAsJsonArray("entry"); String str = entry.toString(); System.out.println(str); 

Questo è per Nikola.

  public static JSONObject setProperty(JSONObject js1, String keys, String valueNew) throws JSONException { String[] keyMain = keys.split("\\."); for (String keym : keyMain) { Iterator iterator = js1.keys(); String key = null; while (iterator.hasNext()) { key = (String) iterator.next(); if ((js1.optJSONArray(key) == null) && (js1.optJSONObject(key) == null)) { if ((key.equals(keym)) && (js1.get(key).toString().equals(valueMain))) { js1.put(key, valueNew); return js1; } } if (js1.optJSONObject(key) != null) { if ((key.equals(keym))) { js1 = js1.getJSONObject(key); break; } } if (js1.optJSONArray(key) != null) { JSONArray jArray = js1.getJSONArray(key); JSONObject j; for (int i = 0; i < jArray.length(); i++) { js1 = jArray.getJSONObject(i); break; } } } } return js1; } public static void main(String[] args) throws IOException, JSONException { String text = "{ "key1":{ "key2":{ "key3":{ "key4":[ { "fieldValue":"Empty", "fieldName":"Enter Field Name 1" }, { "fieldValue":"Empty", "fieldName":"Enter Field Name 2" } ] } } } }"; JSONObject json = new JSONObject(text); setProperty(json, "ke1.key2.key3.key4.fieldValue", "nikola"); System.out.println(json.toString(4)); } 

Se è un aiuto bro, non dimenticarti di migliorare la mia reputazione)))

Puoi provare questo:

 JSONObject result = new JSONObject("Your string here").getJSONObject("result"); JSONObject map = result.getJSONObject("map"); JSONArray entries= map.getJSONArray("entry"); 

Spero che aiuti.

Sono anche di fronte a questo problema. Così ho risolto con la ricorsione. Forse sarà utile. Ho creato il metodo. Ho usato la libreria org.json.

  public static JSONObject function(JSONObject obj, String keyMain, String newValue) throws Exception { // We need to know keys of Jsonobject Iterator iterator = obj.keys(); String key = null; while (iterator.hasNext()) { key = (String) iterator.next(); // if object is just string we change value in key if ((obj.optJSONArray(key)==null) && (obj.optJSONObject(key)==null)) { if ((key.equals(keyMain)) && (obj.get(key).toString().equals(valueMain))) { // put new value obj.put(key, newValue); return obj; } } // if it's jsonobject if (obj.optJSONObject(key) != null) { function(obj.getJSONObject(key), keyMain, valueMain, newValue); } // if it's jsonarray if (obj.optJSONArray(key) != null) { JSONArray jArray = obj.getJSONArray(key); for (int i=0;i 

se hai domande, posso spiegare ...

Lo proverei anche in questo modo

1) Creare i bean Java dallo schema JSON

2) Utilizzare le librerie parser JSON per evitare ogni sorta di eccezione

3) Trasmetti il ​​risultato dell’analisi all’object Java che è stato creato dallo schema JSON iniziale.

Di seguito è riportato un esempio di schema JSON ”

 { "USD" : {"15m" : 478.68, "last" : 478.68, "buy" : 478.55, "sell" : 478.68, "symbol" : "$"}, "JPY" : {"15m" : 51033.99, "last" : 51033.99, "buy" : 51020.13, "sell" : 51033.99, "symbol" : "¥"}, } 

Codice

 public class Container { private JPY JPY; private USD USD; public JPY getJPY () { return JPY; } public void setJPY (JPY JPY) { this.JPY = JPY; } public USD getUSD () { return USD; } public void setUSD (USD USD) { this.USD = USD; } @Override public String toString() { return "ClassPojo [JPY = "+JPY+", USD = "+USD+"]"; } } public class JPY { @SerializedName("15m") private double fifitenM; private String symbol; private double last; private double sell; private double buy; public double getFifitenM () { return fifitenM; } public void setFifitenM (double fifitenM) { this.fifitenM = fifitenM; } public String getSymbol () { return symbol; } public void setSymbol (String symbol) { this.symbol = symbol; } public double getLast () { return last; } public void setLast (double last) { this.last = last; } public double getSell () { return sell; } public void setSell (double sell) { this.sell = sell; } public double getBuy () { return buy; } public void setBuy (double buy) { this.buy = buy; } @Override public String toString() { return "ClassPojo [15m = "+fifitenM+", symbol = "+symbol+", last = "+last+", sell = "+sell+", buy = "+buy+"]"; } } public class USD { @SerializedName("15m") private double fifitenM; private String symbol; private double last; private double sell; private double buy; public double getFifitenM () { return fifitenM; } public void setFifitenM (double fifitenM) { this.fifitenM = fifitenM; } public String getSymbol () { return symbol; } public void setSymbol (String symbol) { this.symbol = symbol; } public double getLast () { return last; } public void setLast (double last) { this.last = last; } public double getSell () { return sell; } public void setSell (double sell) { this.sell = sell; } public double getBuy () { return buy; } public void setBuy (double buy) { this.buy = buy; } @Override public String toString() { return "ClassPojo [15m = "+fifitenM+", symbol = "+symbol+", last = "+last+", sell = "+sell+", buy = "+buy+"]"; } } public class MainMethd { public static void main(String[] args) throws JsonIOException, JsonSyntaxException, FileNotFoundException { // TODO Auto-generated method stub JsonParser parser = new JsonParser(); Object obj = parser.parse(new FileReader("C:\\Users\\Documents\\file.json")); String res = obj.toString(); Gson gson = new Gson(); Container container = new Container(); container = gson.fromJson(res, Container.class); System.out.println(container.getUSD()); System.out.println("Sell Price : " + container.getUSD().getSymbol()+""+ container.getUSD().getSell()); System.out.println("Buy Price : " + container.getUSD().getSymbol()+""+ container.getUSD().getBuy()); } } 

L’output dal metodo principale è:

ClassPojo [15m = 478,68, simbolo = $, ultimo = 478,68, vendere = 478,68, comprare = 478,55]

Prezzo di vendita: $ 478,68

Prezzo di acquisto: $ 478,55

Spero che questo ti aiuti.