gpt4 book ai didi

java - MongoDB:所有完整叶路径

转载 作者:太空宇宙 更新时间:2023-11-04 10:54:35 26 4
gpt4 key购买 nike

有了一个文档,我想在 Java 中获取所有完整路径的列表,仅针对叶子。

例如,拥有此文档:

{A : {
B : {
D : "d"
}
C : {
E : "e",
F : "f"
}
}

我想获得这个List<String> :

"A.B.D",
"A.C.E",
"A.C.F"

某些“mongodb”库是否有功能可以做到这一点?我如何在不使用递归的情况下手动编写它?

最佳答案

我找到了解决方案。

我利用 Gson 库的强大功能将 Document 转换为 json,然后使用 com.google.gson.stream.JsonReader 读取它。

如果性能更高,代码可能会更好,但出于我的需要,这段代码还可以,我只需要阅读很少的文档。

public static List<String> leafPaths(Document document) {
String json = gson.toJson(document);
List<String> leafPaths = new ArrayList<>();
try (JsonReader reader = new JsonReader(new StringReader(json))) {
// scorro tutti gli elemento dello json
while (true) {
JsonToken token = reader.peek();
switch (token) {
case BEGIN_ARRAY:
reader.beginArray();
break;
case END_ARRAY:
reader.endArray();
break;
case BEGIN_OBJECT:
reader.beginObject();
break;
case END_OBJECT:
reader.endObject();
break;
case NAME:
reader.nextName();
break;
case STRING:
reader.nextString();
leafPaths.add(reader.getPath());
break;
case NUMBER:
reader.nextDouble();
leafPaths.add(reader.getPath());
break;
case BOOLEAN:
reader.nextBoolean();
leafPaths.add(reader.getPath());
break;
case NULL:
reader.nextNull();
break;
case END_DOCUMENT:
// tutti i campi
return leafPaths.stream().map(field -> field.substring(2)).collect(toList());
default:
break;
}
}

} catch (Exception e) {
return leafPaths;
}
}

关于java - MongoDB:所有完整叶路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47440072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com