2014-04-01 20 views
-1

我有一個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")); 

輸出IA m到處是

**

tradedDate=01APR2014 
totalTradedVolume=null 

**

我面臨的問題是,得到空值的數組段屬性

可能有人請告訴我如何解決這個?

+0

你可以嘗試使用傑克遜?或者你需要堅持使用JSON API? –

+0

你的答案是在接受答案http://stackoverflow.com/questions/21019131/read-json-file-and-display-its-contents/21019227#21019227 .. :) –

回答

2

主要data實際上包含JSONObjectJSONArray S,所以首先你應該得到所需要的項目,然後我們就到鍵的值。替換此:

json.get("totalTradedVolume") 

與此:

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

請注意,您的例子包含JSONArray只有一個項目,但如果你在它裏面多個項目,你可能要在它們之間迭代。

+0

方法getJSONArray(String)未定義爲JSONObject類型,你使用的是什麼API? – Pawan

+0

@PreethiJain你用什麼庫解析JSON?我的例子是使用'org.json' – nikis

+0

@PreethiJain好吧,看起來你正在使用'javax.json'。我已經更正了我的示例以適合這個庫 – nikis

1

我相信它與「數據」(ARRAY類型)有關。首先嚐試檢索「數據」對象,並遍歷它來獲得「totalTradedVolume」

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")); 
    } 

然後嘗試獲取底層節點。