29

我正在尝试使用简单的 json 迭代一个 json 对象。我已经看到了你可以getJSONObject("child")从哪里做的答案

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

但如果我只是有东西怎么办

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

并且想要迭代那个json对象。这:

Iterator iter = jObj.keys();

抛出:

cannot find symbol
symbol  : method keys()
location: class org.json.simple.JSONObject
4

4 回答 4

63

假设您的 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));
}
于 2014-06-23T18:10:12.187 回答
6

你可以这样做

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"));
    }
}
于 2015-06-08T12:43:56.303 回答
0

在 Java 8 中,我们可以使用 lambdas

void handleJSONObject(JSONObject jsonObject) {
jsonObject.keys().forEachRemaining(key -> {
    Object value = jsonObject.get(key);
    logger.info("Key: {0}\tValue: {1}", key, value);
  }
}
于 2019-06-26T07:22:21.400 回答
0

下面是遍历org.google.jso.JsonElemetset 并按键过滤掉特定 JsonElement 的代码:

Predicate<Map.Entry<String, JsonElement>> keyPredicate = a -> a.getKey().equalsIgnoreCase(jsonAttributeKey);
        Predicate<Map.Entry<String, JsonElement>> valuePredicate = a -> a.getValue()!= null && !a.getValue().isJsonNull();
        return responseJson.getAsJsonObject().entrySet().stream()
                .filter(keyPredicate.and((valuePredicate)))
                .findAny()
                .orElseThrow(() -> {
                    System.out.println(jsonAttributeKey +" tag not exist in the json");
                    return NGPExceptionFactory.getNGPException(errorCode);
                })
                .getValue();
于 2021-09-14T16:27:07.810 回答