it-swarm.com.de

Zugreifen auf Mitglieder von Elementen in einem JSONArray mit Java

Ich fange gerade mit der Verwendung von json mit Java an. Ich bin nicht sicher, wie ich auf Zeichenfolgenwerte in einem JSONArray zugreifen soll. Zum Beispiel sieht mein json so aus:

{
  "locations": {
    "record": [
      {
        "id": 8817,
        "loc": "NEW YORK CITY"
      },
      {
        "id": 2873,
        "loc": "UNITED STATES"
      },
      {
        "id": 1501
        "loc": "NEW YORK STATE"
      }
    ]
  }
}

mein Code:

JSONObject req = new JSONObject(join(loadStrings(data.json),""));
JSONObject locs = req.getJSONObject("locations");
JSONArray recs = locs.getJSONArray("record");

Ich habe zu diesem Zeitpunkt Zugriff auf das JSONArray "record", bin mir jedoch nicht sicher, wie ich die Werte "id" und "loc" in einer for-Schleife erhalten würde. Tut mir leid, wenn diese Beschreibung nicht zu klar ist, ich bin ein bisschen neu in der Programmierung.

112
minimalpop

Haben Sie versucht, mit JSONArray.getJSONObject (int) und JSONArray.length () Ihre for-Schleife zu erstellen:

for (int i = 0; i < recs.length(); ++i) {
    JSONObject rec = recs.getJSONObject(i);
    int id = rec.getInt("id");
    String loc = rec.getString("loc");
    // ...
}
207
notnoop

Ein org.json.JSONArray ist nicht iterierbar.
So verarbeite ich Elemente in einem net.sf.json.JSONArray :

    JSONArray lineItems = jsonObject.getJSONArray("lineItems");
    for (Object o : lineItems) {
        JSONObject jsonLineItem = (JSONObject) o;
        String key = jsonLineItem.getString("key");
        String value = jsonLineItem.getString("value");
        ...
    }

Funktioniert super... :)

5
Piko

Java 8 ist nach fast zwei Jahrzehnten auf dem Markt. Es folgt der Weg, org.json.JSONArray Mit der Java8 Stream API zu iterieren.

import org.json.JSONArray;
import org.json.JSONObject;

@Test
public void access_org_JsonArray() {
    //Given: array
    JSONArray jsonArray = new JSONArray(Arrays.asList(new JSONObject(
                    new HashMap() {{
                        put("a", 100);
                        put("b", 200);
                    }}
            ),
            new JSONObject(
                    new HashMap() {{
                        put("a", 300);
                        put("b", 400);
                    }}
            )));

    //Then: convert to List<JSONObject>
    List<JSONObject> jsonItems = IntStream.range(0, jsonArray.length())
            .mapToObj(index -> (JSONObject) jsonArray.get(index))
            .collect(Collectors.toList());

    // you can access the array elements now
    jsonItems.forEach(arrayElement -> System.out.println(arrayElement.get("a")));
    // prints 100, 300
}

Wenn die Iteration nur einmal durchgeführt wird (es ist nicht erforderlich, .collect)

    IntStream.range(0, jsonArray.length())
            .mapToObj(index -> (JSONObject) jsonArray.get(index))
            .forEach(item -> {
               System.out.println(item);
            });
4
prayagupd

Wenn Sie sich Ihren Code ansehen, spüren Sie, dass Sie JSONLIB verwenden. Wenn dies der Fall war, schauen Sie sich das folgende Snippet an, um json array in Java array .. zu konvertieren.

 JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON( input );  
 JsonConfig jsonConfig = new JsonConfig();  
 jsonConfig.setArrayMode( JsonConfig.MODE_OBJECT_ARRAY );  
 jsonConfig.setRootClass( Integer.TYPE );  
 int[] output = (int[]) JSONSerializer.toJava( jsonArray, jsonConfig );  
2
Teja Kantamneni

Falls es jemand anderem hilft, war ich in der Lage, in ein Array zu konvertieren, indem ich so etwas tat,

JSONObject jsonObject = (JSONObject)new JSONParser().parse(jsonString);
((JSONArray) jsonObject).toArray()

... oder Sie sollten in der Lage sein, die Länge zu bekommen

((JSONArray) myJsonArray).toArray().length
0
wired00