如何检查特定键的 JSON 数组中是否存在值?

How to check if a value exists in a JSON Array for a particular key?

我的JSON数组文件:

[
    {
      "setName": "set-1",
      "testTagName": "Test1",
      "methodName": "addCustomer"
    },
    {
        "setName": "set-1",
        "testTagName": "Test2",
        "methodName": "addAccount"
    },
    {
        "setName": "set-2",
        "testTagName": "Test3",
        "methodName": "addRole"
    }
  ]

我用Java。我在 Gson 对象中有上面的 JSON 数组。 我如何遍历此 Gson 数组以检查特定方法名称(例如:addRole)是否存在于键“methodName”的数组中在任何对象中JSON数组?我期待 true/false 结果。

我检查了 GSON 文档 - (https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/JsonObject.java#L141)

has 方法似乎在检查密钥。我正在寻找一种可以遍历数组对象并检查特定键是否存在特定值的方法。

我怎样才能做到这一点?

首先,您需要将 JSON 代码反序列化为 JsonArray:

JsonArray jsonArr = gson.fromJson(jsonString, JsonArray.class);

之后你可以创建这个方法:

public boolean hasValue(JsonArray json, String key, String value) {
    for(int i = 0; i < json.size(); i++) {  // iterate through the JsonArray
        // first I get the 'i' JsonElement as a JsonObject, then I get the key as a string and I compare it with the value
        if(json.get(i).getAsJsonObject().get(key).getAsString().equals(value)) return true;
    }
    return false;
}

现在可以调用方法了:

hasValue(jsonArr, "methodName", "addRole");

您可以在 JsonArray 中获取 JSON,然后在检查所需值的同时遍历元素。

上面的@Crih.exe建议了一种方法。如果要使用 Streams,可以将 JsonArray 转换为流并使用 anyMatch 到 return 布尔值

...
// Stream JsonArray
Stream<JsonElement> stream = StreamSupport.stream(array.spliterator(), true);

// Check for any matching element
boolean result = stream.anyMatch(e -> e.getAsJsonObject()
                   .get("methodName").getAsString().equals("addRole"));

System.out.println(result);
...