2013-07-19 4 views
1

Я боролся с некоторыми синтаксическими разборами JSON в своем приложении, и после 3 дней исследований я все еще не могу понять проблему.Android: Разбор проблем с файлами JSON

Ошибка, которая посылается в «org.json.JSONException: Значение»

я получил ошибку в Ьгу заявлении/поймать, что я работал.

Мой Try/Поймать выглядит следующим образом:

Try { 
    // Result comes in from an HTTP Request 

    JSONArray jarray = new JSONArray(result); 
    JSONObject jObj = jarray.getJSONObject(0).getJSONObject("results"); 
    String TeamName = jObj.getString("fulltext"); 
} catch (JSONException e) { 
    Log.e("JSON Parser", "Error parsing data " + e.toString()); 
} 

Полный JSON, что я получаю находится here, но сокращенная версия выглядит следующим образом:

{ 
    "query-continue-offset": 50, 
    "query": { 
     "printrequests": [{ 
      "label": "", 
      "typeid": "_wpg", 
      "mode": 2, 
      "format": false 
     }], 
     "results": { 
      "Team:\"Die Unglaublichen\"": { 
       "printouts": [], 
       "fulltext": "Team:\"Die Unglaublichen\"", 
       "fullurl": "http:\/\/wiki.planetkubb.com\/wiki\/Team:%22Die_Unglaublichen%22", 
       "namespace": 822, 
       "exists": true 
      }, 
      "Team:(Can't Stand) Le Kubb Bricks": { 
       "printouts": [], 
       "fulltext": "Team:(Can't Stand) Le Kubb Bricks", 
       "fullurl": "http:\/\/wiki.planetkubb.com\/wiki\/Team:(Can%27t_Stand)_Le_Kubb_Bricks", 
       "namespace": 822, 
       "exists": true 
      }, 
      "Team:(OHC) Kubb Team": { 
       "printouts": [], 
       "fulltext": "Team:(OHC) Kubb Team", 
       "fullurl": "http:\/\/wiki.planetkubb.com\/wiki\/Team:(OHC)_Kubb_Team", 
       "namespace": 822, 
       "exists": true 
      }, 
      "Team:Andrewsons3": { 
       "printouts": [], 
       "fulltext": "Team:Andrewsons3", 
       "fullurl": "http:\/\/wiki.planetkubb.com\/wiki\/Team:Andrewsons3", 
       "namespace": 822, 
       "exists": true 
      } 
     }, 
     "meta": { 
      "hash": "46923025c2d5aac3ee963419db93485d", 
      "count": 50, 
      "offset": 0 
     } 
    } 
} 

Это мой первый время даже, видя код JSON, и, честно говоря, сначала это немного запутывает, но я могу понять, как работает JSON, а не как получить данные из этих массивов!

я что-то не хватает, я просто не могу видеть, что еще ...

+2

корня является JSONObject не JSONArray – Blackbelt

+1

не e.toString вашего исключения. e.printStacktrace. – njzk2

+0

Так что вместо jarray у меня должен быть только один объект, содержащий полные данные JSON? – Vidar

ответ

0

Ошибка вы получаете от этой линии:

String TeamName = jObj.getString("fulltext"); 

Это происходит потому, что значение jObj Безразлично» t имеет «полнотекстовое» значение. Вместо этого это поле является значением каждого ребенка JSONObject. Чтобы избежать этой ошибки, в первую очередь необходимо проверить, если JSONObject имеет переменную «Полный текст»:

String TeamName = null; 
if (jObj.has("fulltext")) 
    TeamName = jObj.getString("fulltext"); 

Чтобы упростить JSON синтаксический, то droidQuery обеспечивает некоторые простые способы создания Map s- и массивы из JSONObject с и JSONArray s:

Map<String, ?> map = $.map(jObj); 
for (Entry<String, ?> entry : map.entrySet()) { 
    String teamName = entry.key(); 
    JSONObject json = (JSONObject) entry.value(); 
    Map<String, ?> team = $.map(json); 
    String fulltext = (String) team.get("fulltext");//etc 
} 
+0

Я попытался использовать droidQuery, как было предложено, и использование приведенного выше примера кода не работает. Я получаю сообщение об ошибке в Eclipse в строке «for»: «может только перебирать массив или экземпляр java.lang.Iterable» с выделенной «map» (после: :) – Vidar

+0

@Vidar см. Редактирование. Я забыл включить вызов '.entrySet()', чтобы вы могли выполнять итерацию по карте. – Phil

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