如何使用Gremlin查询获得正确格式的树层次Json



我试图从AWS海王星数据库检索树层次结构。我使用下面的查询来检索JSON格式的数据

g.V().hasLabel(labelid.toLowerCase()).has("name", "Val oswalt").repeat(__.inE().outV()).emit()
.tree().by(__.valueMap("name")).toList();

返回如下json格式的数据。

[
{
"{name=[Val oswalt]}": {
"{}": {
"{name=[Stan Polomoski]}": {
"{}": {
"{name=[MC Regan]}": {}
}
}
}
}
}
]

是否有可能以适当的json格式或Flare json格式返回数据,如以下

{
"name": "Val oswalt",
"children": [
{
"name": "Stan Polomoski",
"children": [
{
"name": "MC Regan"
}
]
}
]
}

很难使用Gremlin将tree()结果转换为它提供的基础结构以外的任何东西,因为使用Gremlin对返回的Tree进行后期处理以递归地将父/子对转换为新的键/值对将会在您的查询中添加大量不可读的代码。

这有点奇怪,你的结果返回看起来像String表示的Map,你通过做valueMap('name')得到。除非您使用的是不支持Map值作为键的编程语言中的Gremlin,否则我希望您可以在那里获得可以使用的实际Map对象。

说了这么多,基于你的输出目标,看起来你可以更接近这种形式(而不会过度复杂化你的Gremlin),通过这样做:

g.V().hasLabel(labelid.toLowerCase()).
has("name", "Val oswalt").
repeat(__.in()).emit().
tree().
by("name")

应该产生如下内容:

{
"Val oswalt": [
{
"Stan Polomoski": [
{
"MC Regan": []
}
]
}
]
}

虽然不是完全相同的输出,但它绝对更干净,并且意味着相同的结构。如果您只是必须拥有所请求的结构,我强烈建议您使用我建议的修改后的查询,然后在应用程序中对结果进行后处理,以获得该结构,从而使Gremlin保持简单。Gremlin几乎可以做任何事情,但即使是出于学术目的,我也不认为写这个查询是值得的。

相关内容

  • 没有找到相关文章

最新更新