2016-10-24 48 views
-2

我有一個JSON字符串JSON,我需要使用Java(Android版),從中提取字符串如何可以解析使用Java(Android版)

JSON字符串看起來像:

{ 
    "Header": { 
     "context": { 
      "change": { 
       "token": 3191 
      }, 
      "_jsns": "urn:zimbra" 
     } 
    }, 
    "Body": { 
     "AuthResponse": { 
      "authToken": [ 
       { 
        "_content": "token" 
       } 
      ], 
      "lifetime": 43199998, 
      "_jsns": "urn:zimbraAdmin" 
     } 
    }, 
    "_jsns": "urn:zimbraSoap" 
} 

我想獲得_content的值,這是「令牌」是這種情況。

我想什麼: NB:result包含JSON字符串

//result contains the json string 
JSONObject jObject = new JSONObject(result); 
String aJsonString = jObject.getString("Body"); 
JSONObject jResult = new JSONObject(aJsonString); 
String aaa = jResult.getString("authToken"); 

在這一點上,我得到以下錯誤:

W/System.err: org.json.JSONException: No value for authToken

任何幫助將不勝感激

編輯:Java代碼更新

+2

您的JSON是一個對象。有一個「Body」對象。在'Body'對象中是一個'AuthResponse'對象。在AuthResponse對象中是你的'authToken'數組。您需要鑽取整個樹(root - >'Body' - >'AuthResponse' - >'authToken'),並且您似乎跳過了一兩步。 – CommonsWare

+0

'「Body」是**對象**,不是字符串。使用'getJSONObject(「Body」)'。從那裏,得到另一個對象,然後你可以得到令牌數組 –

+0

@ 4castle:對不起,我錯過了一條線。 –

回答

1

您需要遍歷JSON樹一步步

JSONObject jObject = new JSONObject(result); 
JSONObject jBody = jObject.getJSONObject("Body"); 
JSONObject jAuthResponse = jBody.getJSONObject("AuthResponse"); 
JSONArray jauthToken = jAuthResponse.getJSONArray("authToken"); 
JSONObject jFirst = jauthToken.getJSONObject(0); 
String aJsonString = jObject.getString("_content"); 
+0

這對提取單個值有點笨重。它也可以作爲一個單線程完成,每一步都在不同的線路上進行可讀性。 – 4castle

+0

@Merlevede:你的代碼可以正常替換最後一行:'String aJsonString = jFirst.getString(「_ content」);' –

+0

@ 4castle:你可以給出一個關於它的單行程序或文檔的例子嗎? –