在 Neo4j 中使用 apoc.load.jason() 时如何拥有 Json 键的对象数组?
How to have an array of objects of Json keys while using apoc.load.jason() in Neo4j?
我有以下 Json,我想为每个键创建节点,这些键是随机哈希 ID,我还需要这些哈希键来将它们的嵌套对象作为节点展开。我怎样才能拥有包含这些散列键的对象数组(不是字符串数组)。 E.X。数组 = [bacf06771e0f4fc5a8e68c30fc77c9c4,948eeebd73564adab7dee5c6f177b3b9]。我需要 UNWIND array[0].arg1 AS arg1
{
"bacf06771e0f4fc5a8e68c30fc77c9c4":{
"arg1":"the Treasury",
"arg2":"details of the November refunding",
"relation":"will announce",
"id":"bacf06771e0f4fc5a8e68c30fc77c9c4",
"linkedContexts":[
{
"targetID":"948eeebd73564adab7dee5c6f177b3b9",
"classification":"CONTRAST"
}
]
},
"948eeebd73564adab7dee5c6f177b3b9":{
"arg1":"the funding",
"arg2":"",
"relation":"will be delayed",
"id":"948eeebd73564adab7dee5c6f177b3b9",
"linkedContexts":[
{
"targetID":"006a71e51295440fab7a8e8c697d2ba6",
"classification":"CONDITION"
}
]
}
}
我试过了:
Call apoc.load.json("files:/example.json") Yield value
unwind value.sentences as v
foreach (k in keys(v)|merge (arg1:Arg1 {subject:k.arg1})
merge (arg2:Arg2 {object:k.arg2})
merge (arg1)-[:Related_to]->(arg2))
并得到错误:
`Neo.ClientError.Statement.SyntaxError: Type mismatch: expected Any,
Map,Node, Relationship, Point, Duration, Date, Time, LocalTime,
LocalDateTime or DateTime but was String
(line 8, column 27 (offset:371)):"merge (arg1:Arg1 {subject:k.arg1})"
value
没有 sentences
键。
如果您的数据文件与显示的完全一致,则以下查询应该有效。
CALL apoc.load.json("files:///example.json") YIELD value
FOREACH (v in [k IN KEYS(value) | value[k]] |
MERGE (arg1:Arg1 {subject:v.arg1})
MERGE (arg2:Arg2 {object:v.arg2})
MERGE (arg1)-[:Related_to]->(arg2))
这 list comprehension 生成 value
地图的子地图列表:
[k IN KEYS(value) | value[k]]
或者,您可以使用 UNWIND
而不是 FOREACH
,如下所示:
CALL apoc.load.json("files:///example.json") YIELD value
UNWIND [k IN KEYS(value) | value[k]] AS v
MERGE (arg1:Arg1 {subject:v.arg1})
MERGE (arg2:Arg2 {object:v.arg2})
MERGE (arg1)-[:Related_to]->(arg2)
我有以下 Json,我想为每个键创建节点,这些键是随机哈希 ID,我还需要这些哈希键来将它们的嵌套对象作为节点展开。我怎样才能拥有包含这些散列键的对象数组(不是字符串数组)。 E.X。数组 = [bacf06771e0f4fc5a8e68c30fc77c9c4,948eeebd73564adab7dee5c6f177b3b9]。我需要 UNWIND array[0].arg1 AS arg1
{
"bacf06771e0f4fc5a8e68c30fc77c9c4":{
"arg1":"the Treasury",
"arg2":"details of the November refunding",
"relation":"will announce",
"id":"bacf06771e0f4fc5a8e68c30fc77c9c4",
"linkedContexts":[
{
"targetID":"948eeebd73564adab7dee5c6f177b3b9",
"classification":"CONTRAST"
}
]
},
"948eeebd73564adab7dee5c6f177b3b9":{
"arg1":"the funding",
"arg2":"",
"relation":"will be delayed",
"id":"948eeebd73564adab7dee5c6f177b3b9",
"linkedContexts":[
{
"targetID":"006a71e51295440fab7a8e8c697d2ba6",
"classification":"CONDITION"
}
]
}
}
我试过了:
Call apoc.load.json("files:/example.json") Yield value
unwind value.sentences as v
foreach (k in keys(v)|merge (arg1:Arg1 {subject:k.arg1})
merge (arg2:Arg2 {object:k.arg2})
merge (arg1)-[:Related_to]->(arg2))
并得到错误:
`Neo.ClientError.Statement.SyntaxError: Type mismatch: expected Any,
Map,Node, Relationship, Point, Duration, Date, Time, LocalTime,
LocalDateTime or DateTime but was String
(line 8, column 27 (offset:371)):"merge (arg1:Arg1 {subject:k.arg1})"
value
没有 sentences
键。
如果您的数据文件与显示的完全一致,则以下查询应该有效。
CALL apoc.load.json("files:///example.json") YIELD value
FOREACH (v in [k IN KEYS(value) | value[k]] |
MERGE (arg1:Arg1 {subject:v.arg1})
MERGE (arg2:Arg2 {object:v.arg2})
MERGE (arg1)-[:Related_to]->(arg2))
这 list comprehension 生成 value
地图的子地图列表:
[k IN KEYS(value) | value[k]]
或者,您可以使用 UNWIND
而不是 FOREACH
,如下所示:
CALL apoc.load.json("files:///example.json") YIELD value
UNWIND [k IN KEYS(value) | value[k]] AS v
MERGE (arg1:Arg1 {subject:v.arg1})
MERGE (arg2:Arg2 {object:v.arg2})
MERGE (arg1)-[:Related_to]->(arg2)