2016-10-24 3 views
-2

JSON 자바 (안드로이드)를 사용하여 구문 분석 할 수 있고 나는어떻게 내가 JSON 문자열을

는 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 코드 업데이트

(210)
+2

귀하의 JSON 객체입니다하여 JSON 트리 단계를 통과해야합니다. 거기에는'Body' 객체가 있습니다. 'Body' 객체는'AuthResponse' 객체입니다. 'AuthResponse' 객체는'authToken' 배열입니다. 전체 트리 (root ->'Body' ->'AuthResponse' ->'authToken')를 드릴 다운해야합니다. 그러면 한 두 단계 건너 뛰는 것처럼 보입니다. – CommonsWare

+0

''Body "'는 ** 객체 **이며 문자열이 아닙니다. 'getJSONObject ("Body")'를 사용하십시오. 그런 다음 다른 객체를 가져 와서 토큰 배열을 얻을 수 있습니다 –

+0

@ 4castle : 죄송합니다. –

답변

1

당신은 단계

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 : 그것에 대해 하나의 라이너 나 문서를 줄 수 있습니까? –

관련 문제