2011-04-06 102 views
22

我在從JSON對象中提取值時遇到了一些問題。這裏是我的代碼如何在Android中解析JSON對象

try { 
    JSONObject json = new JSONObject(result); 
    JSONObject json2 = json.getJSONObject("results"); 
    test = json2.getString("name");  
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

test被聲明爲String。代碼運行時顯示null。如果我在調試模式下懸停在json2以上,我可以看到對象內的所有值和名稱。

我也試過

test = json2.length(); 

這回test = 0。即使當我將鼠標懸停在json2對象上時,我也可以讀取對象內的值。

這是我將使用的JSON字符串的一個示例。

{ 
    "caller":"getPoiById", 
    "results": 
    { 
     "indexForPhone":0, 
     "indexForEmail":"NULL", 
     "indexForHomePage":"NULL", 
     "indexForComment":"NULL", 
     "phone":"05137-930 68", 
     "cleanPhone":"0513793068", 
     "internetAccess":"2", 
     "overnightStay":"2", 
     "wasteDisposal":"2", 
     "toilet":"2", 
     "electricity":"2", 
     "cran":"2", 
     "slipway":"2", 
     "camping":"2", 
     "freshWater":"2", 
     "fieldNamesWithValue":["phone"], 
     "fieldNameTranslations": ["Telefon"], 
     "id":"1470", 
     "name":"Marina Rasche Werft GmbH & Co. KG", 
     "latitude":"52.3956107286487", 
     "longitude":"9.56583023071289" 
    } 
} 
+0

您提供的JSON字符串示例至少適用於我。你是否也遇到了該字符串的問題? – harism 2011-04-06 15:01:48

+0

你能爲此顯示整個代碼嗎?還是至少幫我用我的問題與jsonobject – Giant 2013-04-19 00:15:39

回答

43

最後我用JSONObject.get而不是JSONObject.getString解決了問題,然後把test轉換成String

private void saveData(String result) { 
    try { 
     JSONObject json= (JSONObject) new JSONTokener(result).nextValue(); 
     JSONObject json2 = json.getJSONObject("results"); 
     test = (String) json2.get("name"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 
+0

我遇到了同樣的問題,做法。你尋找/設法找到解釋爲什麼這個工程,但getJSONObject不? – Raiyan 2014-02-18 16:15:46

4
JSONArray jsonArray = new JSONArray(yourJsonString); 

for (int i = 0; i < jsonArray.length(); i++) { 
    JSONObject obj1 = jsonArray.getJSONObject(i); 
    JSONArray results = patient.getJSONArray("results"); 
    String indexForPhone = patientProfile.getJSONObject(0).getString("indexForPhone")); 
} 

更改爲JSONArray,然後轉換爲JSONObject的。

9

在你的JSON格式,但它沒有啓動JSON對象

像:

{ 
    "info" :  <!-- this is starting JSON object --> 
     { 
     "caller":"getPoiById", 
     "results": 
     { 
      "indexForPhone":0, 
      "indexForEmail":"NULL", 
      . 
      . 
     } 
    } 
} 

以上的Json始於info爲JSON對象。因此,在執行:

JSONObject json = new JSONObject(result); // create JSON obj from string 
JSONObject json2 = json.getJSONObject("info"); // this will return correct 

現在,我們可以訪問result領域:

JSONObject jsonResult = json2.getJSONObject("results"); 
test = json2.getString("name"); // returns "Marina Rasche Werft GmbH & Co. KG" 

我認爲這是缺少等問題解決了,而我們使用JSONTokener像你這樣的答案。

你的回答非常好。只是我想我添加這個信息,所以我回答了

謝謝