使用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”);