我有这种格式的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
**
我面临的问题是,获取数组部分属性的空值
任何人都可以告诉我如何解决这个问题吗?
答案 0 :(得分:2)
键data
实际上包含JSONArray
个JSONObject
,所以首先应该获取所需的项目,然后获取键的值。替换这个:
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"));
}
然后尝试获取底层节点。