使用Java访问JSONArray中的项目的成员
我刚刚开始与Java使用JSON。 我不知道如何访问JSONArray中的string值。 例如,我的json看起来像这样:
{ "locations": { "record": [ { "id": 8817, "loc": "NEW YORK CITY" }, { "id": 2873, "loc": "UNITED STATES" }, { "id": 1501 "loc": "NEW YORK STATE" } ] } }
我的代码:
JSONObject req = new JSONObject(join(loadStrings(data.json),"")); JSONObject locs = req.getJSONObject("locations"); JSONArray recs = locs.getJSONArray("record");
我现在可以访问“logging”JSONArray,但我不确定如何在for循环中获得“id”和“loc”值。 对不起,如果这个描述不太清楚,我有点新的编程。
您是否尝试过使用[ JSONArray.getJSONObject(int)
]( http://json.org/javadoc/org/json/JSONArray.html#getJSONObject JSONArray.getJSONObject(int)
)和[ JSONArray.length()
]( http:// json.org/javadoc/org/json/JSONArray.html#length())来创build你的for循环:
for (int i = 0; i < recs.length(); ++i) { JSONObject rec = recs.getJSONObject(i); int id = rec.getInt("id"); String loc = rec.getString("loc"); // ... }
org.json.JSONArray不可迭代。
以下是我在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"); ... }
伟大的作品… 🙂
通过查看你的代码,我觉得你正在使用JSONLIB。 如果是这样的话,看看下面的代码将json数组转换为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 );
Java 8在将近二十年后在市场上出现,以下是用java8 Stream API迭代org.json.JSONArray
的方法。
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 }
如果迭代只有一次,(不需要.collect
)
IntStream.range(0, jsonArray.length()) .mapToObj(index -> (JSONObject) jsonArray.get(index)) .forEach(item -> { System.out.println(item); });
如果它帮助别人,我可以通过做这样的事情来转换为一个数组,
JSONObject jsonObject = (JSONObject)new JSONParser().parse(jsonString); ((JSONArray) jsonObject).toArray()
…或者你应该能够得到的长度
((JSONArray) myJsonArray).toArray().length
HashMap regs =(HashMap)parser.parse(stringjson);
(String)(( HashMap )regs.get(“firstlevelkey”))。get(“secondlevelkey”);