|| apoc.load.json - APOC 核心文档 - Neo4j 文档

apoc.load.json

从本地文件加载需要将 apoc.import.file.enabled=true 设置在 apoc.conf 中。Aura 不支持此功能。因此,Aura 实例仅限于加载公共托管文件。

详情

语法

apoc.load.json(urlOrKeyOrBinary [, path, config ]) :: (value)

描述

如果给定的 JSON 文件是 LIST<ANY>,则此过程将 JSON 文件作为值流导入。如果给定的 JSON 文件是 MAP,则此过程导入单个值。

输入参数

名称

类型

描述

urlOrKeyOrBinary

任意类型

要导入数据的文件的名称或二进制数据。

path

字符串

用于从列表中提取特定部分的 JSON 路径表达式。默认值为空:``。

config

映射

{ failOnError = true :: BOOLEAN, pathOptions :: LIST<STRING>, compression = "NONE" :: ["NONE", "BYTES", "GZIP", "BZIP2", "DEFLATE", "BLOCK_LZ4", "FRAMED_SNAPPY"] }。默认值为:{}

返回参数

名称

类型

描述

value

映射

从给定文件加载的数据映射。

从文件读取

默认情况下,文件系统导入是禁用的。我们可以通过在 apoc.conf 中设置以下属性来启用它

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.conf
apoc.import.file.use_neo4j_config=false

Neo4j 现在将能够从文件系统上的任何位置读取,因此在设置此属性之前请确保这是您的意图。

使用示例

person.json 包含一个 JSON 文档,表示一个人及其子女。

person.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 可视化显示了导入的图

apoc.load.json.local.file

二进制文件

您还可以从二进制 byte[](未压缩)或压缩文件导入文件(允许的压缩算法有:GZIPBZIP2DEFLATEBLOCK_LZ4FRAMED_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] }

© . This site is unofficial and not affiliated with Neo4j, Inc.