web-dev-qa-db-ja.com

JSONObjectは、名前に関係なく最初のノードの値を取得します

JSONObjectの名前を知らなくても、JSONObjectの最初の子の値を取得する方法があるかどうか疑問に思っています。

this_guyというノードでJSONが入ってくる

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

子の名前がわからない場合、JSONObjectを使用して、「気になる値」をきれいに取得するにはどうすればよいですか。私が知っているのは「this_guy」だけです、誰か?

8
erik

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);
16
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);
0
AbtPst

キーではなく値のみを気にする場合は、これを直接使用できます。

Object myValue = fromJson.toMap().values().iterator().next();
0
xMichal