Как разбирать объект JSON в Android

У меня возникают проблемы с выделением значений из объекта JSON. Вот мой код

try { JSONObject json = new JSONObject(result); JSONObject json2 = json.getJSONObject("results"); test = json2.getString("name"); } catch (JSONException e) { e.printStackTrace(); } 

test объявляется как String . Когда код запускается, он показывает null . Если я json2 над json2 в режиме отладки, я могу видеть все значения и имена внутри объекта.

Я также пробовал

 test = json2.length(); 

Это возвращало test = 0 . Даже когда я json2 курсор на объект json2 я могу читать значения внутри объекта.

Вот пример строки JSON, которую я буду использовать.

 { "caller":"getPoiById", "results": { "indexForPhone":0, "indexForEmail":"NULL", "indexForHomePage":"NULL", "indexForComment":"NULL", "phone":"05137-930 68", "cleanPhone":"0513793068", "internetAccess":"2", "overnightStay":"2", "wasteDisposal":"2", "toilet":"2", "electricity":"2", "cran":"2", "slipway":"2", "camping":"2", "freshWater":"2", "fieldNamesWithValue":["phone"], "fieldNameTranslations": ["Telefon"], "id":"1470", "name":"Marina Rasche Werft GmbH & Co. KG", "latitude":"52.3956107286487", "longitude":"9.56583023071289" } } 

В конце концов я решил его использовать JSONObject.get а не JSONObject.getString а затем JSONObject.getString test к String .

 private void saveData(String result) { try { JSONObject json= (JSONObject) new JSONTokener(result).nextValue(); JSONObject json2 = json.getJSONObject("results"); test = (String) json2.get("name"); } catch (JSONException e) { e.printStackTrace(); } } 

Взгляните на http://developer.android.com/reference/org/json/JSONTokener.html

Это может решить вашу проблему.

В вашем формате JSON у него нет стартового объекта JSON

Подобно :

 { "info" :  { "caller":"getPoiById", "results": { "indexForPhone":0, "indexForEmail":"NULL", . . } } } 

Над Json начинается с info как объекта JSON. Поэтому при выполнении:

 JSONObject json = new JSONObject(result); // create JSON obj from string JSONObject json2 = json.getJSONObject("info"); // this will return correct 

Теперь мы можем получить доступ result полю result :

 JSONObject jsonResult = json2.getJSONObject("results"); test = json2.getString("name"); // returns "Marina Rasche Werft GmbH & Co. KG" 

Я думаю, что этого не хватало, и поэтому проблема была решена, пока мы используем JSONTokener как ваш ответ.

Ваш ответ очень хороший. Просто я думаю, что добавляю эту информацию, поэтому я ответил

спасибо

 JSONArray jsonArray = new JSONArray(yourJsonString); for (int i = 0; i < jsonArray.length(); i++) { JSONObject obj1 = jsonArray.getJSONObject(i); JSONArray results = patient.getJSONArray("results"); String indexForPhone = patientProfile.getJSONObject(0).getString("indexForPhone")); } 

Перейдите в JSONArray, затем конвертируйте в JSONObject.

  • Простейший способ прочитать json из URL-адреса в java
  • как получить значения spinner в textview
  • Определите, является ли JSON JSONObject или JSONArray
  • Как написать пользовательский десериализатор JSON для Gson?
  • JQuery getJSON заполняет выбор пункта меню
  • Анализ JSON из данных успеха JQuery.ajax
  • Retrofit2 Android: ожидается BEGIN_ARRAY, но BEGIN_OBJECT в строке 1 столбец 2 путь $
  • Deserialize JSON с jacksonом в полиморфные типы - полный пример дает мне ошибку компиляции
  • Как обрабатывать большие загрузки файлов через WCF?
  • Различные названия свойств JSON при сериализации и десериализации
  • Как обрабатывать json, который возвращает как строку, так и строковый массив?
  • Давайте будем гением компьютера.