Разбор JSON для JSON для JSON в JSONObject

У меня есть строка JSON, идущая с сервера, и она выглядит так:

{ "categories": { "0": { "term_id": "247", "name": "Content Curation" }, "1": { "term_id": "50", "name": "Content Marketing" }, "2": { "term_id": "2", "name": "Curation" }, "3": { "term_id": "246", "name": "Inbound Marketing" }, "4": { "term_id": "47", "name": "Marketing" }, "5": { "term_id": "4", "name": "News Curation" }, "6": { "term_id": "36", "name": "SEO" }, "8": { "term_id": "248", "name": "Wordpress Content Curation" } } } 

Моя задача – получить значения полей «term_id» и «name». Я использовал, чтобы получить объект категорий из текущего JSONObject, используя этот код:

 JSONObject jObject = new JSONObject(responceData); JSONObject categoryObject = jObject.getJSONObject("categories"); JSONArray jarray = new JSONArray("["+categoryObject.toString().substring(1,categoryObject.toString().length() - 1) + "]"); for(int i=0;i<jarray.length();i++) { JSONObject jobj = jarray.getJSONObject(i); String term_id=jobj.getString("term_id"); String name=jobj.getString("name"); } 

и categoryObject выглядит так:

 { "0": { "term_id": "247", "name": "Content Curation" }, "1": { "term_id": "50", "name": "Content Marketing" }, "2": { "term_id": "2", "name": "Curation" }, "3": { "term_id": "246", "name": "Inbound Marketing" }, "4": { "term_id": "47", "name": "Marketing" }, "5": { "term_id": "4", "name": "News Curation" }, "6": { "term_id": "36", "name": "SEO" }, "8": { "term_id": "248", "name": "Wordpress Content Curation" } } 

Но после этого я не знаю, как получить поля. Есть ли способ получить всех JSONObject-детей из JSONObject?

Если у вас есть исходный код или вы можете дать мне пример, поделитесь им со мной.

здесь вы можете получить все ваши данные json, попросить конкретный ключ и innerKey получить то, что вы хотите, приветствия

  try { String jsonString="";//your json string here JSONObject jObject= new JSONObject(jsonString).getJSONObject("categories"); Iterator keys = jObject.keys(); while( keys.hasNext() ) { String key = keys.next(); Log.v("**********", "**********"); Log.v("category key", key); JSONObject innerJObject = jObject.getJSONObject(key); Iterator innerKeys = innerJObject.keys(); while( innerKeys.hasNext() ) { String innerKkey = keys.next(); String value = innerJObject.getString(innerKkey); Log.v("key = "+key, "value = "+value); } } } catch (JSONException e) { e.printStackTrace(); } 

Проверьте этот ответ , таким образом, вам не нужно знать ключи, и вы можете просто прокрутить и получить доступ к внутреннему объекту, но категории будут лучше, чем JSONArray, а не объект, таким образом вы могли бы просто нормально проходить через

 for(int i = 0; i < array.length(); i++) { JSONObject obj = myArray.get(i); .... } 

Используйте iterator keys () для перебора всех свойств и вызовите get () для каждого.

 Iterator iter = json.keys(); while (iter.hasNext()) { String key = iter.next(); try { Object value = json.get(key); } catch (JSONException e) { // Something went wrong! } } 

См. Это: https://stackoverflow.com/a/13573965/2480911

попробуй это

 JSONObject jObject = new JSONObject(responceData); JSONObject categoryObject = jObject.getJSONObject("categories"); JSONObject obj0 = categoryObject.getJSONObject("0"); String termId0 obj0.getString("term_id"); String name0 obj0.getString("name"); JSONObject obj1 = categoryObject.getJSONObject("1"); String termId1 obj1.getString("term_id"); String name1 obj1.getString("name"); 

но я согласен с wqrahd, категории должны быть массивом

Большое спасибо Ахмаду Двайку и Тому Харту за ответы. Это код для решения.

 try { JSONObject jObject= new JSONObject(responseData).getJSONObject("categories"); Iterator keys = jObject.keys(); while( keys.hasNext() ) { String key = keys.next(); Log.v("**********", "**********"); Log.v("category key", key); JSONObject innerJObject = jObject.getJSONObject(key); String name = innerJObject.getString("name"); String term_id = innerJObject.getString("term_id"); Log.v("name = "+name, "term_id = "+term_id); } } catch (JSONException e){ e.printStackTrace(); } 

В то время как «Чернокнижник» Ахмада Двайка дал очень хороший ответ, но в его коде есть ошибка,

 try { String jsonString="";//your json string here JSONObject jObject= new JSONObject(jsonString).getJSONObject("categories"); Iterator keys = jObject.keys(); while( keys.hasNext() ) { String key = keys.next(); Log.v("**********", "**********"); Log.v("category key", key); JSONObject innerJObject = jObject.getJSONObject(key); Iterator innerKeys = innerJObject.keys(); while( innerKeys.hasNext() ) { String innerKkey = innerKeys.next(); //Here was the error String value = innerJObject.getString(innerKkey); Log.v("key = "+key, "value = "+value); } } } catch (JSONException e) { e.printStackTrace(); } 
  • NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
  • Как я могу сопоставить «корневой» сервлет, чтобы другие скрипты все еще выполнялись?
  • В чем причина UnsupportedClassVersionError?
  • Интерфейсы со статическими полями в java для совместного использования 'констант'
  • Проверка, является ли строка пустой или пустой в Java
  • Как resize текста заголовка в панели действий?
  • Android Geocoder getFromLocationName всегда возвращает null
  • Как исправить INSTALL_PARSE_FAILED_MANIFEST_MALFORMED в приложении для Android
  • notifyDataSetChanged () делает обновление списка и прокручивает подсказки назад
  • Что такое обратный вызов в Android?
  • Android получает значение от выбранного радиообмена
  • Давайте будем гением компьютера.