web-dev-qa-db-ja.com

JSON SimpleでルートからJSONObjectを反復処理する

Json simpleを使用してjsonオブジェクトを反復処理しようとしています。私はあなたがからgetJSONObject( "child")を行うことができる答えを見ました

{ "child": { "something": "value", "something2": "value" } }

しかし、私が何かを持っている場合

{
"k1":"v1",
"k2":"v2",
"k3":"v3"
} 

そのjsonオブジェクトを反復処理したい。この:

Iterator iter = jObj.keys();

throws:シンボルが見つかりませんsymbol:メソッドkeys()場所:クラスorg.json.simple.JSONObject

23
PixMach

JSONオブジェクトがファイル「simple.json」に保存されていると仮定すると、次のように属性と値のペアを反復処理できます。

JSONParser parser = new JSONParser();

Object obj = parser.parse(new FileReader("simple.json"));

JSONObject jsonObject = (JSONObject) obj;

for(Iterator iterator = jsonObject.keySet().iterator(); iterator.hasNext();) {
    String key = (String) iterator.next();
    System.out.println(jsonObject.get(key));
}
44
manouti

このようにすることができます

String jsonstring = "{ \"child\": { \"something\": \"value\", \"something2\": \"value\" } }";
JSONObject resobj = new JSONObject(jsonstring);
Iterator<?> keys = resobj.keys().iterator();
while(keys.hasNext() ) {
    String key = (String)keys.next();
    if ( resobj.get(key) instanceof JSONObject ) {
        JSONObject xx = new JSONObject(resobj.get(key).toString());
        Log.d("res1",xx.getString("something"));
        Log.d("res2",xx.getString("something2"));
    }
}
6
Ratnesh Kumar

Java 8では、ラムダを使用できます

void handleJSONObject(JSONObject jsonObject) {
jsonObject.keys().forEachRemaining(key -> {
    Object value = jsonObject.get(key);
    logger.info("Key: {0}\tValue: {1}", key, value);
  }
}
0
Saurabh Verma