无法提取JSON数组中存在的属性

时间:2014-04-01 11:32:06

标签: java json

我有这种格式的JSON

{
    "futLink": "/live_market/dynaContent/live_watch/get_quote/GetQuoteFO.jsp?underlying=INFY&instrument=FUTSTK&expiry=24APR2014&type=-&strike=-",
    "otherSeries": [
        "EQ"
    ],
    "lastUpdateTime": "01-APR-2014 16:00:01",
    "tradedDate": "01APR2014",
    "data": [
        {
            "deliveryToTradedQuantity": "66.31",
            "totalTradedVolume": "10,78,544"
        }
    ],
    "optLink": "/marketinfo/sym_map/symbolMapping.jsp?symbol=INFY&instrument=-&date=-&segmentLink=17&symbolCount=2"
}

我需要提取上面显示的剖面数据数组中的属性

我尝试使用简单的JSON Api

JSONObject json = (JSONObject)new JSONParser().parse(jsonString);
        System.out.println("tradedDate=" + json.get("tradedDate"));
        System.out.println("totalTradedVolume=" + json.get("totalTradedVolume"));

我得到的输出是

**

tradedDate=01APR2014
totalTradedVolume=null

**

我面临的问题是,获取数组部分属性的空值

任何人都可以告诉我如何解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

data实际上包含JSONArrayJSONObject,所以首先应该获取所需的项目,然后获取键的值。替换这个:

json.get("totalTradedVolume")

用这个:

json.getJsonArray("data").getJsonObject(0).getString("totalTradedVolume")

请注意,您的示例仅包含JSONArray中的一个项目,但如果您内部有多个项目,则可能需要对其进行迭代。

答案 1 :(得分:1)

我相信它与“数据”(ARRAY的类型)有关。首先尝试检索“数据”对象并迭代它以获得“totalTradedVolume”

答案 2 :(得分:1)

您将totalTradedVolume视为null,因为它不是您的响应中的直接节点。它存在于数组"数据"之下。所以首先在JSONObject中获取响应。然后将数组提取为

    JSONObject object = new JSONObject(resp);
    System.out.println(object.get("futLink"));
    JSONArray arr = object.getJSONArray("data");

    for (int i = 0; i < arr.length(); i++) {
        JSONObject o = arr.getJSONObject(i);
        System.out.println(o.get("deliveryToTradedQuantity"));
        System.out.println(o.get("totalTradedVolume"));
    }

然后尝试获取底层节点。