我有这样一个嵌套的JSON,它存储在io.vertx.core.JSON.jsonObject
中。
{
"field1" : [],
"field2" : "value1",
"field3" : [],
"field4" : [{
"field5" : "value2",
"field6" : {
"date" : "2021-04-27"
}
}]
}
Optional<Map.Entry<String, Object>> result =
myJsonObject.stream()
.filter(p -> p.getKey().contains("field5"))
.findAny();
我正在使用io.vertx.core.json,并且只能使用这个库。
我修改了方法,使其与io.vertx.core.json
包兼容。
com.google.gson.jsonElement
->java.lang.object
jsonElement.getasjsonObject()
(JsonArray)
->(JsonArray)jsonElement
io.vertx.core.json.jsonObject
实现iterable
,所以我可以在它上使用foreach
。
//...
private static void traverseAndCollectByKey(Object jsonElement, String key) {
if (jsonElement instanceof JsonObject) {
JsonObject jsonObject = (JsonObject) jsonElement;
if (jsonObject.containsKey(key)) {
results.add(jsonObject.getValue(key));
}
jsonObject.forEach(entry -> traverseAndCollectByKey(entry.getValue(), key));
} else if (jsonElement instanceof JsonArray) {
((JsonArray) jsonElement).forEach(item -> traverseAndCollectByKey(item, key));
}
}
//...
io.vertx.core.json.jsonObject
和io.vertx.core.json.jsonArray
也有stream
方法,所以这个函数稍微简化了一下:
//...
private static Stream<Map.Entry<String, Object>> recursiveFlattening(
Entry<String, Object> entry) {
Object jsonElement = entry.getValue();
if (jsonElement instanceof JsonObject) {
return ((JsonObject) jsonElement).stream()
.flatMap(Main::recursiveFlattening);
} else if (jsonElement instanceof JsonArray) {
return ((JsonArray) jsonElement).stream()
.map(v -> Map.entry("", v))
.flatMap(Main::recursiveFlattening);
} else {
return Stream.of(entry);
}
}
}
可玩演示:https://replit.com/@huzz4/traverse-and-collect-from-json-iovertxcorejson
Optional<Map.Entry<String, Object>> result =
myJsonObject.stream()
.flatMap(Main::recursiveFlattening)
.filter(e -> "field5".equals(e.getKey()))
.findAny();
问题内容: 假设我有一个对象: 我想找到一个id为1的对象。是否有类似这样的功能?我可以使用Underscore的方法,但必须从顶部开始然后向下过滤。 问题答案: 递归是您的朋友。我更新了该函数以说明属性数组:
问题内容: 假设我有一个像这样的JSON数组: 不,我想基于id查找某个对象,一旦有了该对象,就需要它的子代及其所有childs子代 所以可以说如果 4d024610-a39b-49ce-8581-a18500739a75* 我想找到一个具有ID的元素 * 那应该找到Element Sub2 现在,它应该产生所有将产生的所有子元素id id: 假设我会做 因此,我猜它有两个部分,首先找到“父”元素
我陷入了需要检查嵌套JSON对象中是否存在键的情况。通过嵌套JSON对象,我在父JSON对象中有一个JSON对象作为其键之一的值。所以我需要检查这个键是否存在于整个JSON对象中。我将以下数据作为对象获取。我知道我可以解析这个对象以获取JSON对象。 我使用了方法来检查主JSON对象中是否存在密钥,它可以正常工作。但是要检查任何内部JSON对象,比如“info”,我需要再次将解析为JSON对象,然
问题内容: 我有正在使用nodeJS读取的csv文件。我在阅读之前将每个文件转换为文本。 文件中的每一行都有以’=’分隔的数据。 每行看起来像 “ =“之前的第一部分代表我应用程序中json对象的索引。我的目的是解析此数据并为其构建json表示,以便上面的行成为 使用javascript / node js; 如何将应该表示嵌套JSON键序列的字符串转换为上述json对象? 问题答案: 您可以分割
我正在使用jpa的criteriabuilder,希望在jsonb列中查找json字段的值。jsonb如下所示: 我开始创建我的谓词,但我得到了错误。 我得到的错误是 psqlException:错误:函数json_extract(jsonb,字符变化)不存在提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。 有人能帮忙吗?
问题内容: 我想实现的想法是一个ID表。基本上,它具有以下结构(user_id,teacher_id),其中user_id是指我的User表中的主键,而讲者ID是指我的讲师表中的主键。 我正在尝试在Redis中实现此功能,但是如果我将键设置为用户的主要ID,则当我尝试运行查询时,例如 获得讲师ID = 5的所有记录, 因为讲师不是键,但是我不会 值 能够在O(1)时间到达。 如何形成上面提到的id