JSONObjectの名前を知らなくても、JSONObjectの最初の子の値を取得する方法があるかどうか疑問に思っています。
this_guy
というノードでJSONが入ってくる
{"this_guy": {"some_name_i_wont_know":"the value i care about"}}
子の名前がわからない場合、JSONObjectを使用して、「気になる値」をきれいに取得するにはどうすればよいですか。私が知っているのは「this_guy」だけです、誰か?
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);
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);
キーではなく値のみを気にする場合は、これを直接使用できます。
Object myValue = fromJson.toMap().values().iterator().next();