首页 > 解决方案 > 如何从使用 Cypher 嵌入 JSON 文档的属性中获取数据

问题描述

我有以下情况:我有一些信息存储在 Neo4j 中。一个属性存储一个 JSON 文档,我想获取这个 JSON 文档中的信息。我已经检索了数据,甚至是使用 MATCH 的 JSON 字段:

MATCH (n:Node) 返回 n.id, n.nodeInfo 作为 JSONInfo

JSONInfo(它是 Node 的一个属性),具有 JSON 信息:

{ "TIMESTAMP":"2018-03-11T04:58:24Z", "field1":"358716053191804", "field2":"732111149743974", "version_field", "3.9.1" "field3":"0", "field4":"0" }

但是,我只想获取具有内部 JSON 属性的 field1。

在 MATCH 命令中检索此字段的最佳方法是什么?

提前致谢

标签: neo4jcypher

解决方案


首先,您的示例不是有效的 JSON。您的version_field键和值应该用冒号分隔,而不是逗号,并且在“3.9.1”之后需要一个逗号。

{ "TIMESTAMP":"2018-03-11T04:58:24Z", "field1":"358716053191804", "field2":"732111149743974", "version_field":"3.9.1", "field3":"0", "field4":"0" }

一旦修复,并且该字段是有效的 JSON,您可以使用APOC 过程中的 JSON 转换函数来执行从 JSON 对象到地图的转换,然后只需使用点符号来访问地图属性:

MATCH (n:Node)
RETURN apoc.convert.fromJsonMap(n.nodeInfo).field1 as field1

请记住,无法索引 JSON 地图字符串中的地图属性,因此您的 JSON 字符串属性中的数据应用于存储和检索,而不是用于查找。


推荐阅读