Je commence 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 au JSONArray "record" à ce stade, mais je ne suis pas sûr de la façon dont j'obtiendrais les valeurs "id" et "loc" dans une boucle for. Désolé si cette description n'est pas trop claire, je suis un peu nouveau dans la programmation.
Réponses:
Avez-vous essayé d'utiliser JSONArray.getJSONObject (int) et JSONArray.length () pour créer votre boucle for:
la source
id
avec un sinplegetInt
comme la façon dont nous obtenons la valeur d'un hashmap en spécifiant la clé, alors pourquoi devons-nous itérer avec une boucle for? L'itération avec la boucle n'entraîne-t-elle pas l'id
attribution deint id
plusieurs fois?Un org.json.JSONArray n'est pas itérable.
Voici comment je traite les éléments dans un net.sf.json.JSONArray :
Fonctionne très bien... :)
la source
JSONArray
n'est pas itérable.Java 8 est sur le marché après près de 2 décennies, voici le moyen d'itérer
org.json.JSONArray
avec l'API java8 Stream.Si l'itération est une seule fois, (inutile de le faire
.collect
)la source
.mapToObj
affiche "exception non gérée: JSONException".mapToObj(index -> (JSONObject) array.get(index))
, il y ajsonArray.get(index)
ce qui peut potentiellement lancer,JSONException
maisJSONException extends RuntimeException
cela devrait donc bien au moins au moment de la compilationEn regardant votre code, je sens que vous utilisez JSONLIB. Si tel était le cas, regardez l'extrait de code suivant pour convertir le tableau json en tableau java.
la source
Au cas où cela aiderait quelqu'un d'autre, j'ai pu convertir en un tableau en faisant quelque chose comme ça,
... ou vous devriez pouvoir obtenir la longueur
la source
org.json.JSONObject
a unetoJSONArray(JSONArray names)
méthode etorg.json.JSONArray
a unetoJSONObject(JSONArray names)
méthode mais il n'a pas detoArray()
méthode.HashMap regs = (HashMap) parser.parse (stringjson);
(String) (( HashMap ) regs.get ("firstlevelkey")). Get ("secondlevelkey");
la source