2014-04-08 3 views
1

나는 HTTP GET을 통해 서버에서 데이터를 가져 와서 응답 (JSON 형식)을 String에 저장하는 안드로이드 애플리케이션을 개발 중이다. String을 파싱하고 JSONArray 내에서 값을 가져 오려고합니다. 문자열에 저장되어 ERROR JSONArray 안의 JSONObject 구문 분석하기 안드로이드

수신 된 JSON은 다음과 같습니다

{ 
    "code": 1, 
    "data": { 
     "moodGraphData": { 
      "myself": { 
       "1": { 
        "id": "999999999", 
        "value": "4.3", 
        "name": "Myself", 
        "owner": "", 
        "type": 1, 
        "children": [] 
       } 
      }, 
      "my_teams": [], 
      "my_units": [], 
      "companies": [ 
       { 
        "id": "4", 
        "name": "Testing", 
        "owner": "Ankur Ankur", 
        "value": "3.4", 
        "type": "4", 
        "children": { 
         "0": { 
          "id": "10", 
          "value": 3.8, 
          "name": "Mun tiimi", 
          "owner": "", 
          "type": 5, 
          "children": [], 
          "count": 1 
         }, 
         "4": { 
          "id": "31", 
          "value": 3.05, 
          "name": "gmail.com", 
          "owner": "", 
          "type": 5, 
          "children": [ 
           { 
            "id": "27", 
            "value": 2.3, 
            "name": "Priidu Team2", 
            "owner": " ", 
            "type": 5, 
            "children": [], 
            "count": 1 
           } 
          ], 
          "count": 2 
         }, 
         "6": { 
          "id": "50", 
          "value": 2.95, 
          "name": "gmail.com", 
          "owner": "", 
          "type": 5, 
          "children": [ 
           { 
            "id": "51", 
            "value": 2.6, 
            "name": "Testing", 
            "owner": "Ujjwal Mairh", 
            "type": 5, 
            "children": [], 
            "count": 1 
           } 
          ], 
          "count": 2 
         } 
        } 
       } 
      ] 
     }, 
     "companyTopStatements": [ 
      { 
       "id": "1", 
       "text": "I am happy at work today", 
       "key": "Mood", 
       "answer": "3.5" 
      }, 
      { 
       "id": "8", 
       "text": "I am using my strengths at work", 
       "key": "Strengths", 
       "answer": "3.5" 
      }, 
      { 
       "id": "11", 
       "text": "My opinions matter and I can influence in my work", 
       "key": "Influence", 
       "answer": "3.5" 
      } 
     ], 
     "companyBottomStatements": [ 
      { 
       "id": "13", 
       "text": "I am surrounded by teammates who are motivated and doing great things", 
       "key": "Team", 
       "answer": "3.2" 
      }, 
      { 
       "id": "14", 
       "text": "I have a close friends at work", 
       "key": "Friendship", 
       "answer": "3.2" 
      }, 
      { 
       "id": "15", 
       "text": "I receive frequent feedback in order to progress in my role", 
       "key": "Feedback", 
       "answer": "3.2" 
      } 
     ] 
    }, 
    "errors": null 
} 

내가 JSON 배열 "companyTopStatements"을 분석하고, 내부에있는 "키"의 값을 검색 할 JSONObject.

다음과 같이 내가 사용하는 코드입니다 : 나는 그것을 구문 분석 할 수 없습니다입니다

 JSONObject jsonObj = new JSONObject(Get_MyCompany_JSON); 
     JSONArray jsonArray = jsonObj.getJSONArray("companyTopStatements"); 
     for(int i=0;i<jsonArray.length();i++) 
     { 
      JSONObject curr = jsonArray.getJSONObject(i); 
         String keyValue = curr.getString("key"); 
      Log.d("Key",keyValue); 
     } 

을 예외 획득 :

04-08 21:25:03.561: W/System.err(13464):  org.json.JSONException: No value for companyTopStatements 
04-08 21:25:03.561: W/System.err(13464): at org.json.JSONObject.get(JSONObject.java:354) 
04-08 21:25:03.561: W/System.err(13464): at org.json.JSONObject.getJSONArray(JSONObject.java:548) 
04-08 21:25:03.561: W/System.err(13464): at com.moodwonder.fi.HTTP_SignIn_Thread.doInBackground(HTTP_SignIn_Thread.java:105) 
04-08 21:25:03.561: W/System.err(13464): at com.moodwonder.fi.HTTP_SignIn_Thread.doInBackground(HTTP_SignIn_Thread.java:1) 
04-08 21:25:03.561: W/System.err(13464): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
04-08 21:25:03.561: W/System.err(13464): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
04-08 21:25:03.561: W/System.err(13464): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
04-08 21:25:03.561: W/System.err(13464): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
04-08 21:25:03.561: W/System.err(13464): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
04-08 21:25:03.566: W/System.err(13464): at java.lang.Thread.run(Thread.java:841) 

답변

0

org.json.JSONExcepti on : companyTopStatements에 대한 값 없음

맨 위에 json 객체 노드가 있지만 JSONArray companyTopStatements은 해당 json 객체 아래에 있지 않습니다. 데이터에서

{ // json object node 
    "code": 1, 
    "data": { // json object data 

당신은 당신이 된 JSONObject data 아래 JSONArray companyTopStatements

"companyTopStatements": [ 

있습니다.

당신은

JSONObject jsonObj = new JSONObject(Get_MyCompany_JSON); 
JSONObject jb = jsonObj.getJSONObject("data"); 
JSONArray jsonArray = jb.getJSONArray("companyTopStatements"); 
+0

대단히 감사합니다. 나는 companyTopStatements가 독립적 인 JSONArray라고 가정했다. JSON 트리 뷰는 실제로 그것을 얻는 데 도움이됩니다. –

+0

@ user3511823 특히 긴 json 인 경우 – Raghunandan

3
JSONObject jsonObj = new JSONObject(Get_MyCompany_JSON); 
JSONObject jsondata = jsonObj.getJSONObject("data"); 
JSONArray jsonArray = jsondata.getJSONArray("companyTopStatements"); 
for(int i=0;i<jsonArray.length();i++) 
{ 
    JSONObject curr = jsonArray.getJSONObject(i); 
    String keyValue = curr.getString("key"); 
    Log.d("Key",keyValue); 
} 

당신은 companyTopStatements를 잊어 버린 것은 data 객체에

+0

http://www.jquery4u.com/demos/online-json-tree-viewer/# 감사합니다 @ json으로 붙여 넣기하여 확인할 수 있습니다. 귀하의 솔루션으로 해결되었습니다. 나는 데이터 객체의 닫는 중괄호를 올바르게 읽을 수 없었다. 나는 companyTopStatements가 독립적 인 JSONArray라고 가정했다. –