Estou apenas começando a usar json com java. Não sei como acessar valores de cadeia de caracteres em um JSONArray. Por exemplo, meu json fica assim:
{
"locations": {
"record": [
{
"id": 8817,
"loc": "NEW YORK CITY"
},
{
"id": 2873,
"loc": "UNITED STATES"
},
{
"id": 1501
"loc": "NEW YORK STATE"
}
]
}
}
meu código:
JSONObject req = new JSONObject(join(loadStrings(data.json),""));
JSONObject locs = req.getJSONObject("locations");
JSONArray recs = locs.getJSONArray("record");
Eu tenho acesso ao JSONArray "record" neste momento, mas não tenho certeza de como obteria os valores "id" e "loc" dentro de um loop for. Desculpe se esta descrição não está muito clara, sou um pouco novo em programação.
Respostas:
Você tentou usar JSONArray.getJSONObject (int) e JSONArray.length () para criar seu loop for:
fonte
id
um sinplegetInt
como obter o valor de um hashmap especificando a chave, por que precisamos iterar com um loop for? A iteração com o loop nãoid
é atribuída aint id
várias vezes?Um org.json.JSONArray não é iterável.
Veja como eu processo elementos em um net.sf.json.JSONArray :
Funciona bem... :)
fonte
JSONArray
não é iterável.O Java 8 está no mercado após quase duas décadas, a seguir é o caminho para iterar
org.json.JSONArray
com a API Stream java8.Se a iteração for apenas uma vez, (não é necessário
.collect
)fonte
.mapToObj
mostra "exceção não tratada: JSONException".mapToObj(index -> (JSONObject) array.get(index))
, há asjsonArray.get(index)
que potencialmente podem serJSONException
JSONException extends RuntimeException
Ao olhar para o seu código, sinto que você está usando JSONLIB. Se for esse o caso, observe o seguinte trecho para converter json array em java array.
fonte
Caso isso ajude outra pessoa, fui capaz de converter em uma matriz fazendo algo assim,
... ou você deve conseguir o comprimento
fonte
org.json.JSONObject
possui umtoJSONArray(JSONArray names)
método eorg.json.JSONArray
possui umtoJSONObject(JSONArray names)
método, mas não possui umtoArray()
métodoHashMap regs = (HashMap) parser.parse (stringjson);
(String) (( HashMap ) regs.get ("firstlevelkey")). Get ("secondlevelkey");
fonte