【发布时间】:2021-06-15 18:36:11
【问题描述】:
我有一个像这样的深层嵌套 JsonObject,在这个对象中搜索特定值(本例中为 null)的最佳方法是什么?
{
"monitors" : ["monitor1"],
"index" : [{
"patterns" : [ "*" ],
"masked" : [ "abcd", "*ip_dest*::/[0-9]{1,3}$/::XXX"],
"allowed" : [ "123", null ]
}],
"permissions" : [ ]
}
对于这个例子,我有一个键列表,我想获取这些键的值,检查该值是否具有 Array 类型,如果是,则搜索该数组中是否有任何 null。这是我的代码:
for (Entry<String, DataType> allowedKey : allowedKeys.entrySet()) {
DataType dataType = allowedKey.getValue();
JsonNode value = contentAsNode.get(allowedKey.getKey());
if (dataType == DataType.ARRAY && value != null) {
try {
List contentArray = DefaultObjectMapper.objectMapper.convertValue(value, java.util.List.class);
if (contentArray.contains(null)) {
this.errorType = ErrorType.NULL_ARRAY_ELEMENT;
return false;
}
} catch (Exception e) {
this.errorType = ErrorType.BODY_NOT_PARSEABLE;
return false;
}
}
}
但是contains() 在这种情况下找不到null,因为我有一个嵌套数组。由于 Json 对象的结构每次都可能不同(它可能有嵌套数组或映射或只是一个数组),我想知道解析深层嵌套 JsonObject 以找到特定值的最佳方法是什么?
进一步说明:在上面的Json例子中,我感兴趣的key是index,这个key的值,是一个map(但也可以是数组或者嵌套数组,我们不知道事先),我想检查index 值中是否有任何null(在这种情况下,有一个空值)
【问题讨论】:
-
如果“允许”数组包含空值,你想提取哪个值?
-
如果该键的值中有任何
null,我需要if语句返回True。 -
你可以使用任何第三方 jar 像 Jsonpath 吗?它将为您提供灵活的使用方式。
-
可能没有,我想知道是否有任何方法可以直接使用
JsonObject或JsonArray,因为它们都可供我使用。 -
哦,好吧,虽然已经贴出来了,如果你不能用,请告诉我,我可以改变它