2012-02-29 5 views
0

JSON을 사용하여 PHP 파일에서 Android로 데이터를 가져오고 싶습니다. 내가 프로그램을 디버깅 할 때Android : JSONObject를 JSONArray로 변환 할 수 없습니다.

.... 
HttpEntity e = r.getEntity(); 
String data = EntityUtils.toString(e); 
JSONArray timeline = new JSONArray(data); 
JSONObject last = timeline.getJSONObject(0); 
return last; 

이 줄에 JSONException이있다 :

JSONObject last = timeline.getJSONObject(0); 

데이터 {"a":1,"b":2,"c":3,"d":4,"e":5}하고 예외는 다음과 같습니다 JSON 배열에서

org.json.JSONException: Value {"d":4,"e":5,"b":2,"c":3,"a":1} of type org.json.JSONObject cannot be converted to JSONArray 
+0

JSON 개체'{ "a": 1, "b": 2, "c": 3, "d": 4, "e": 5}'입니다. 이 '[{{a ": 1,"b ": 2,"c ": 3,"d ": 4,"e ": 5}]'는 JSONObject가 1 인 JSONArray입니다. – SERPRO

답변

1

은이 내 코드입니다 []을 사용하여 설명했습니다. 다섯 개의 속성을 가진 객체를 정의합니다.

+0

도움 주셔서 대단히 감사합니다! – user1240287

+0

[Paul Polo] (http://stackoverflow.com/users/1168612/paul-polo) [comments] (http://stackoverflow.com/suggested-edits/247620) : 나는 당신이'{{ }'대신'[''? 위의 내용을 참조하십시오. – Rup

+0

@Rup 실수는 배열과 객체가 아니라는 얘기였습니다. 그것을 지적 해 주셔서 감사합니다 –

2

예외 메시지는 매우 명확하며 JSON syntax diagrams을 살펴 보는 것이 좋습니다. 코드를 수신 한 JSON 문자열 :

{"a":1,"b":2,"c":3,"d":4,"e":5} 

이 문자열은 객체이 아닌 배열을 나타냅니다. 어레이의 일례는이 될 것이다 :조차

[1, 2, 3, 4, 5] 
또는

: 시작 괄호 닫는 것을

[{"a":1,"b":2,"c":3,"d":4,"e":5}] 

참고.

예외 위치가 약간 잘못된 것 같습니다. 이 초기화 지연 또는 뭔가 다른 어떤 종류의 결과인지는 모르겠지만, 나는 원인이 실제로이 줄 믿습니다 다음 data 문자열이 JSON 객체가 아닌 배열을 나타내므로

JSONArray timeline = new JSONArray(data); 

이 작업은 분명히 불가능합니다.

+0

도움 주셔서 대단히 감사합니다! – user1240287

0
JSONArray timeline = new JSONArray(data); 
// change JSONArray to JSONObject 

JSONObject timeline = new JSONObject(data);// Like This 

JSON 데이터가 배열이 아닙니다.

0

json 응답은 배열 형식이 아니라 객체 형식입니다. 따라서 json 객체를 구문 분석하면됩니다. "data"가 응답으로 JSONObject 태그라고 가정합니다. 다음은 구문 분석 방법입니다.

  HttpEntity e = r.getEntity(); 
      String result = EntityUtils.toString(e); 
      JSONObject response=new JSOBObject(result); 
      JSONOBject Data=response.getJSONObject("data"); 
      int a=Data.getInt("a"); 
      int b=Data.getInt("b"); 
      int c=Data.getInt("c"); 
      int d=Data.getInt("d"); 
      int e=Data.getInt("e"); 

감사합니다.

관련 문제