json - 使用 CYPHER 读取 json 中的 json 属性名称
问题描述
我的 Neo4J 数据库有这种输入 JSON 文件:
{"list":[
{
"extraction":{"extractorId":"45485","date":"20211201","location":"France"},
"actors":{"88187":"Toto","74017":"Titi","78901":"Tata","45867":"Tutu"},
"data":{"2877:-99033:-979":{"4934":[45867],"4935":[88187],"4933":[74017],"4932":[45867],"4931":[78901,45867],"4930":[78901]}}
},
{"extraction":{"extractorId":"45485","date":"20211201","location":"England"},
"actors":{"42815":"Lala","45867":"Tutu"},
"data":{"2877:-99033:-979":{"4939":[86970],"4934":[74975,45867],"4935":[42815,88187],"4933":[74017],"4932":[45867],"4931":[78901,45867],"4930":[78901]}}}
]}
如您所见,这不是标准的 JSON 格式,因为属性名称也可以是值。
如何使用 UNWIND、FOREACH 等阅读此内容?单行 CYPHER 请求不是强制性的。
例如,如果我想用 (a:Actor {id,name}) 创建节点,如果我尝试这个:
WITH "file:///data.json" as json
CALL apoc.load.json(json) YIELD value
UNWIND value.list AS item
UNWIND item.actors AS actors
RETURN actors
我明白了
row1 :
{
"45867": "Tutu",
"74017": "Titi",
"78901": "Tata",
"88187": "Toto"
}
row 2 :
{
"42815": "Lala",
"45867": "Tutu",
}
如何获取 ID 和名称以在 MERGE 节点密码命令中使用它们?
解决方案
该keys
功能可以在这里提供帮助。详细说明您的初始查询:
WITH "file:///data.json" as json
CALL apoc.load.json(json) YIELD value
UNWIND value.list AS item
UNWIND item.actors AS actors
// Extract map's keys, that will be the ID
WITH keys(actors) as keys, actors
// "loop" over keys
UNWIND keys as key
RETURN key as id, actors[key] as name
结果:
╒═══════╤══════╕
│"id" │"name"│
╞═══════╪══════╡
│"78901"│"Tata"│
├───────┼──────┤
│"45867"│"Tutu"│
├───────┼──────┤
│"74017"│"Titi"│
├───────┼──────┤
│"88187"│"Toto"│
├───────┼──────┤
│"45867"│"Tutu"│
├───────┼──────┤
│"42815"│"Lala"│
└───────┴──────┘
推荐阅读
- dynamic-programming - 航空航天工程问题中的动态规划
- postgresql - Ansible:postgresql_db 恢复挂起
- python - 列表类型不适合 JSON 序列化
- javascript - 通过单击 javascript 3 值中的按钮将日期更改为下一个/上一个
- javascript - 包含对象的数组未更新
- javascript - Return 在这里做什么?
- javascript - 实现深层链接 url 导致反应原生应用程序无法打开 android
- mysql - 如何正确优化此查询?
- flutter - Flutter DropDownbutton不显示选定的值
- java - JpaRepository 在服务类中获取 Null