使用Java访问JSONArray中的项成员

使用Java访问JSONArray中的项成员

我刚刚开始在java中使用json。我不确定如何在JSONArray中访问字符串值。例如,我的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");

此时我可以访问“记录”JSONArray,但我不确定如何在for循环中获取“id”和“loc”值。对不起,如果这个描述不太清楚,我对编程有点新意。


LEATH
浏览 278回答 3
3回答

HUH函数

您是否尝试过使用JSONArray.getJSONObject(int)和JSONArray.length()来创建for循环:for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;recs.length();&nbsp;++i)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;JSONObject&nbsp;rec&nbsp;=&nbsp;recs.getJSONObject(i); &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;id&nbsp;=&nbsp;rec.getInt("id"); &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;loc&nbsp;=&nbsp;rec.getString("loc"); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...}

波斯汪

一个org.json.JSONArray不迭代。以下是我在net.sf.json.JSONArray中处理元素的方法:&nbsp;&nbsp;&nbsp;&nbsp;JSONArray&nbsp;lineItems&nbsp;=&nbsp;jsonObject.getJSONArray("lineItems"); &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(Object&nbsp;o&nbsp;:&nbsp;lineItems)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSONObject&nbsp;jsonLineItem&nbsp;=&nbsp;(JSONObject)&nbsp;o; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key&nbsp;=&nbsp;jsonLineItem.getString("key"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value&nbsp;=&nbsp;jsonLineItem.getString("value"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;}效果很好...... :)

喵喔喔

Java 8在近二十年后进入市场,以下是org.json.JSONArray使用java8 Stream API&nbsp;进行迭代的方法。import&nbsp;org.json.JSONArray;import&nbsp;org.json.JSONObject;@Testpublic&nbsp;void&nbsp;access_org_JsonArray()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//Given:&nbsp;array &nbsp;&nbsp;&nbsp;&nbsp;JSONArray&nbsp;jsonArray&nbsp;=&nbsp;new&nbsp;JSONArray(Arrays.asList(new&nbsp;JSONObject( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;HashMap()&nbsp;{{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;put("a",&nbsp;100); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;put("b",&nbsp;200); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;JSONObject( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;HashMap()&nbsp;{{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;put("a",&nbsp;300); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;put("b",&nbsp;400); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))); &nbsp;&nbsp;&nbsp;&nbsp;//Then:&nbsp;convert&nbsp;to&nbsp;List<JSONObject> &nbsp;&nbsp;&nbsp;&nbsp;List<JSONObject>&nbsp;jsonItems&nbsp;=&nbsp;IntStream.range(0,&nbsp;jsonArray.length()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.mapToObj(index&nbsp;->&nbsp;(JSONObject)&nbsp;jsonArray.get(index)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toList()); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;you&nbsp;can&nbsp;access&nbsp;the&nbsp;array&nbsp;elements&nbsp;now &nbsp;&nbsp;&nbsp;&nbsp;jsonItems.forEach(arrayElement&nbsp;->&nbsp;System.out.println(arrayElement.get("a"))); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;prints&nbsp;100,&nbsp;300}如果迭代只有一次,(不需要.collect)&nbsp;&nbsp;&nbsp;&nbsp;IntStream.range(0,&nbsp;jsonArray.length()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.mapToObj(index&nbsp;->&nbsp;(JSONObject)&nbsp;jsonArray.get(index)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.forEach(item&nbsp;->&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(item); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java