2012-07-18 138 views
0

在讀取/解析Java中的以下JSON字符串時遇到問題。如何使用Java讀取JSON數據

代碼:

try{ 
    json = new JSONObject(result); 
//json now looks like this :- 
// {'header': '[{"doc_no": "DN00001","stage":"P"}]','section':'[{"upper":100,"lower":1]'} 
    if (json != null){ 
    // this line is throwing an exception!! 
    JSONObject header = new JSONObject("header"); 
    }catch(JSONException e){ 
    // Error Message 
} 

我也試過這樣:

JSONArray header = json.getJSONArray("header"); 

,但仍然拋出一些例外。

我錯過了什麼?

+1

哪個例外? – hvgotcodes 2012-07-18 12:51:12

+1

我想你需要從變量'json'中獲得'header'字段。創建新的JSONObject看起來很奇怪。 – nhahtdh 2012-07-18 12:52:55

回答

1

這裏花花公子拿這段代碼。修復你的JSON字符串,如果你想從中獲得JSONObject

public static void main(String[] args) throws JSONException { 
    String result = "{'header': '[{\"doc_no\": \"DN00001\",\"stage\":\"P\"}]','section':'[{\"upper\":100,\"lower\":1]'}"; 
    JSONObject json = new JSONObject(result); 
    // json now looks like this :- 
    // 
    if (json != null) { 
     String header = json.getString("header"); 
     System.out.println(header); 
    } 

} 

那麼你怎麼了?幾件事:

  1. 您的JSON字符串是非法的。感謝解析器支持你。它應該是

    { 
        "header": [{"doc_no": "DN00001","stage":"P"}], 
        "section":[{"upper":100,"lower":1] 
    } 
    
  2. 它不會獨自解決您的問題。既然你想得到JSONObject,但你提供了JSONArray(你爲什麼這麼做?)。所以刪除那些方括號。

  3. 還是不高興。你看到你試圖創建一個新的JSONObject通過做(明顯)new JSONObject("header")使用字符串taht不是JSON。 9,期待它不會拋出錯誤?多殘忍。)另外你想get而不是set。所以使用json.getXXX("header")其中XXX可以是String,JSONObjectJSONArray等等。

+0

太棒了,但如果你讀我的問題,我也試圖得到JSONArray(「標題」)沒有運氣,雖然好指針... – gath 2012-07-18 14:15:20

+0

@gath老兄,你需要修復你的JSON字符串像# 1。如果你想要'JSONArray',跳過#2。在#3中,使用'json.getJSONArray(「header」);'。 – Nishant 2012-07-18 14:29:40

+0

儘管每個人都給了一個指向正確方向的指針,即json字符串格式不正確,但我會選擇這個答案作爲其廣泛的解釋。謝謝大家,我的服務器(在Python中)沒有正確格式化JSON,我修改了它,現在JSON中的所有鍵都帶有雙引號{「header」:[{「doc_no」:「DN00001」}]}。 – gath 2012-07-19 05:48:12

4

這不是有效的JSON文件。

'header': '[{"doc_no": "DN00001","stage":"P"}]' 

陣列無法與'
字符串包圍應"而不是'

包圍閱讀http://json.org/有關JSON語法。

+2

爲什麼它不是一個有效的JSON。這是一個有效的JSON,其關鍵'標題'和值爲* string * [{「doc_no」:「DN00001」,「stage」:「P」}],這不是嚴格有效的,但大部分解析器都可以工作。 – Nishant 2012-07-18 12:56:32

+1

「不嚴格有效」意味着它是無效的 - 一些解析器可能執行較少 – 2012-07-18 12:58:51

+0

然後它應該用'''而不是''包圍起來 – pawelzieba 2012-07-18 12:58:53

0

JSONObject header = new JSONObject("header");

不要你的意思是得到json頭,而不是創建一個新的JSONObject

JSONObject header = json.get("header");

1
JSONObject header = new JSONObject("header"); 

您的意思是從現有對象中獲取的 「頭」 場?

JSONObject header = json.getJSONObject("header"); 

但是從您的評論來看

// {'header': '[{"doc_no": "DN00001","stage":"P"}]','section':'[{"upper":100,"lower":1]'} 

您打算「頭」是一個數組(不是對象),但數據有它作爲一個字符串(看起來像一個數組)所以您可能需要修復JSON以及Java代碼。