2012-02-29 2 views
0

Я хочу получить данные из php-файла на Android с помощью JSON. Это мой код: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} и Исключение:

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}]' является JSONArray с 1 JSONObject – SERPRO

ответ

1

В JSon массивах описанный с использованием []. Там вы определяете объект с пятью атрибутами.

+0

Большое спасибо за помощь! – user1240287

+0

[Paul Polo] (http://stackoverflow.com/users/1168612/paul-polo) [комментарии] (http://stackoverflow.com/spected-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}] 

Обратите внимание, что открытие и закрытие скобок.

Я думаю, что вы обнаружите, что местоположение исключения немного вводит в заблуждение. Я не знаю, если это является результатом какой-то ленивой инициализации или что-то другое, но я считаю, что причина на самом деле эта линия:

JSONArray timeline = new JSONArray(data); 

Поскольку data строка представляет собой объект JSON, а не массив , эта операция явно невозможна.

+0

Большое спасибо за помощь! – user1240287

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

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

Данные JSON не являются массивом.

0

Ваш ответ json находится в форме объекта, а не в форме массива. Поэтому вам нужно просто проанализировать свой json-объект. Предположим, что «данные» - это тег 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"); 

Спасибо.

Смежные вопросы