138 votes

Accès aux membres d'éléments d'un tableau JSONArray avec Java

Je commence tout juste à utiliser json avec java. Je ne sais pas comment accéder aux valeurs de chaîne dans un JSONArray. Par exemple, mon json ressemble à ceci:

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

mon code:

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

J'ai accès à JSONArray "record" à ce stade, mais je ne sais pas comment obtenir les valeurs "id" et "loc" dans une boucle for. Désolé si cette description n'est pas trop claire, je suis un peu nouveau en programmation.

244voto

notnoop Points 30218

Avez-vous essayé d'utiliser JSONArray.getJSONObject(int) et JSONArray.length() pour créer votre boucle for:

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

5voto

Piko Points 3470

Un org.json.JSONArray n'est pas itérable.
Voici comment je traite des éléments dans un 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");
        ...
    }
 

Fonctionne très bien... :)

2voto

Teja Kantamneni Points 9112

En regardant votre code, je sens que vous utilisez JSONLIB. Si tel était le cas, regardez l'extrait suivant pour convertir le tableau json en tableau java.

  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 );
 

-1voto

fvu Points 21471

Juste deviner, mais on dirait que vous êtes à l'aide de l'ancienne Java mise en œuvre de json.org. Il y a plusieurs meilleure et la plus facile des solutions aujourd'hui, donc dans le long terme, il pourrait être une bonne idée d'avoir un coup d'oeil vers de nouvelles alternatives.

Jetez un oeil à cet article ici sur DONC, j'ai utilisé le Jackson bibliothèque une couple de fois, et l'aime beaucoup.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X