apoc.load.json
|
从本地文件加载需要将 |
语法 |
|
||
描述 |
如果给定的 JSON 文件是 |
||
输入参数 |
名称 |
类型 |
描述 |
|
|
要导入数据的文件的名称或二进制数据。 |
|
|
|
用于从列表中提取特定部分的 JSON 路径表达式。默认值为空:``。 |
|
|
|
|
|
返回参数 |
名称 |
类型 |
描述 |
|
|
从给定文件加载的数据映射。 |
|
从文件读取
默认情况下,文件系统导入是禁用的。我们可以通过在 apoc.conf 中设置以下属性来启用它
apoc.import.file.enabled=true
如果我们未先设置此属性就尝试使用任何导入过程,将会收到以下错误消息
调用过程失败:原因:java.lang.RuntimeException: 文件导入未启用,请在 apoc.conf 中设置 apoc.import.file.enabled=true |
导入文件从 import 目录读取,该目录由 server.directories.import 属性定义。这意味着我们提供的任何文件路径都是相对于此目录的。如果尝试从绝对路径(例如 /tmp/filename)读取,则会收到类似于以下内容的错误消息
调用过程失败:原因:java.lang.RuntimeException: 无法将 URL 或键文件 file:/path/to/neo4j/import/tmp/filename 作为 JSON 读取:/path/to/neo4j//import/tmp/filename (无此文件或目录) |
通过在 apoc.conf 中设置以下属性,我们可以启用从文件系统上的任何位置读取文件
apoc.import.file.use_neo4j_config=false
|
Neo4j 现在将能够从文件系统上的任何位置读取,因此在设置此属性之前请确保这是您的意图。 |
使用示例
person.json 包含一个 JSON 文档,表示一个人及其子女。
{
"name":"Michael",
"age": 41,
"children": ["Selina","Rana","Selma"]
}
我们将此文件放入 Neo4j 实例的 import 目录中。现在,让我们使用 apoc.load.json 过程编写一个查询来探索此文件。
以下查询处理 person.json 并将内容作为 Cypher 数据结构返回
CALL apoc.load.json("file:///person.json")
YIELD value
RETURN value;
| value |
|---|
{name: "Michael", children: ["Selina", "Rana", "Selma"], age: 41} |
我们得到一个与 JSON 文档几乎相同的映射。现在,我们可以扩展该查询,根据此 JSON 文件创建图。我们将为 Michael 和他的每个子女创建一个 Person 节点,并从每个子女到 Michael 节点创建 CHILD_OF 关系。
person.json 创建图CALL apoc.load.json("file:///person.json")
YIELD value
MERGE (p:Person {name: value.name})
SET p.age = value.age
WITH p, value
UNWIND value.children AS child
MERGE (c:Person {name: child})
MERGE (c)-[:CHILD_OF]->(p);
下面的 Neo4j Browser 可视化显示了导入的图
二进制文件
您还可以从二进制 byte[](未压缩)或压缩文件导入文件(允许的压缩算法有:GZIP、BZIP2、DEFLATE、BLOCK_LZ4、FRAMED_SNAPPY)。
CALL apoc.load.json(`binaryGzipByteArray`, '', {compression: 'GZIP'})
或
CALL apoc.load.json(`binaryFileNotCompressed`, '', {compression: 'NONE'})
例如,这个与 apoc.util.compress 函数配合使用效果很好
WITH apoc.util.compress('{"foo":[1,2,3]}', {compression: 'DEFLATE'}) as jsonCompressed
CALL apoc.load.json(jsonCompressed, '', {compression: 'DEFLATE'})
YIELD value
RETURN value
| value |
|---|
{"foo": [1, 2, 3] } |