2015-11-04 2 views
4

мне интересно, если есть способ, чтобы получить значение первого ребенка в JSONObject, не зная его имя:JSONObject получить значение первого узла, независимо от имени

У меня есть некоторые JSON приходя в с узлом под названием , this_guy

{"this_guy": {"some_name_i_wont_know":"the value i care about"}} 

Использование JSONObject, как я могу получить «значение я забочусь о» чисто, если я не знаю, имя ребенка. Все, что я знаю, это «this_guy», кто-нибудь?

+0

- это позиция значения «значение, которое мне нужно», зафиксированное в каждом объекте JSON? – AbtPst

+0

@AbtPst не может. в зависимости от реализации, положение значений в объектах json не обязательно зависит от положения в json-строках. (и положение вообще может быть недоступно, например, если json parser возвращает объекты с hashmaps) – njzk2

+0

hmm, ну должно быть что-то, что вы знаете о позиции интересующего вас значения? если вы не знаете ключ, и вы не знаете курс/индекс, тогда нет способа выяснить, где это значение. – AbtPst

ответ

9

Используйте JSONObject.keys() который возвращает итератор имен строк в этом объекте. затем используйте эти ключи для извлечения значений.

Чтобы получить только первое значение:

Iterator<String> keys = jsonObject.keys(); 
// get some_name_i_wont_know in str_Name 
String str_Name=keys.next(); 
// get the value i care about 
String value = json.optString(str_Name); 
+0

Но я хочу только первое значение, независимо от каких-либо других ключей – erik

+0

@erik: см. мой ответ на редактирование –

+0

@erik понятие «first» не имеет смысла в объекте json. – njzk2

0
Object obj = parser.parse(new FileReader("path2JsonFIle")); 

JSONObject jsonObject = (JSONObject) obj; 

попробовать этот итератор

JSONObject jsonObj = (JSONObject)jsonObject.get("this_guy"); 

for (Object key : jsonObj.keySet()) { 
     //based on you key types 
     String keyStr = (String)key; 
     Object keyvalue = jsonObj.get(keyStr); 

     /*check here for the appropriate value and do whatever you want*/ 
     //Print key and value 
     System.out.println("key: "+ keyStr + " value: " + keyvalue); 

    } 

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

int count = 0; 

String valuINeed=""; 
for (Object key : jsonObj.keySet()) { 
      //based on you key types 
      String keyStr = (String)key; 
      Object keyvalue = jsonObj.get(keyStr); 

      valueINeed = (String)keyvalue; 
      count++; 

      /*check here for the appropriate value and do whatever you want*/ 
      //Print key and value 
      System.out.println("key: "+ keyStr + " value: " + keyvalue); 

      if(count==1) 
       break; 

     } 

      System.out.println(valueINeed); 
Смежные вопросы