我的JSON数组文件:
[
{
"setName": "set-1",
"testTagName": "Test1",
"methodName": "addCustomer"
},
{
"setName": "set-1",
"testTagName": "Test2",
"methodName": "addAccount"
},
{
"setName": "set-2",
"testTagName": "Test3",
"methodName": "addRole"
}
]我用Java。上面的JSON位于一个Gson对象中。如何迭代这个Gson数组,以检查JSON数组的任何对象(如: addRole)中的键"methodName“中是否存在特定的方法名(例如:)?我期望结果是对的[假的]。
我检查了GSON (https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/JsonObject.java#L141)
has方法似乎检查密钥。我正在寻找一个方法,它可以迭代数组的对象,并检查某个特定的键是否存在一个特定的值。
我怎样才能做到这一点?
发布于 2021-07-15 23:39:30
首先,您需要以这种方式将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");发布于 2021-07-16 08:53:28
您可以在JsonArray中获取JSON,然后在检查所需值的同时遍历元素。
上面的@Crih.exe提出了一种方法。如果要使用流,可以将JsonArray转换为流,并使用anyMatch返回布尔值。
...
// 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);
...https://stackoverflow.com/questions/68401511
复制相似问题