apoc.load.jsonParams

在 APOC 2025.06 版本中,此过程已被迁移至不受支持的 APOC Extended 库。这意味着如果您使用的是 APOC 2025.06 或更高版本,该过程在 Cypher 25 中将不可用,但仍可在 Cypher 5 中使用。有关更多信息,请参阅 APOC 和 Cypher 版本
该存储过程名称中的“Params”是指在连接到给定 URL 时对 HTTP 请求的 headers(请求头)和 payload(负载)进行参数化,而不是指 Neo4j 的 $ 参数。
详细信息

语法

apoc.load.jsonParams(urlOrKeyOrBinary, headers, payload [, path, config ]) :: (value)

描述

从 URL(例如 Web API)加载 JSON 文档。如果给定的 JSON 文档是 LIST<ANY>,则将其作为值流加载。如果给定的 JSON 文件是 MAP,则该过程导入单个值。

输入参数

名称

类型

描述

urlOrKeyOrBinary

ANY

从中导入数据的文件名或二进制数据。请注意,URL 需要经过适当编码以符合 URI 标准。

headers

MAP

连接到给定 URL 时使用的请求头。

payload

STRING

连接到给定 URL 时发送的负载。

path

STRING

用于提取 JSON 文档特定子部分的 JSON 路径表达式(通过 JSONPath 表达式提取)。默认值为:``。

config

MAP

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

返回参数

名称

类型

描述

MAP

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

从文件读取

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

apoc.conf
apoc.import.file.enabled=true

如果我们尝试在未先设置此属性的情况下使用任何导入过程,将会收到以下错误消息

Failed to invoke procedure: Caused by: java.lang.RuntimeException: Import from files not enabled, please set apoc.import.file.enabled=true in your apoc.conf

导入文件从 import 目录读取,该目录由 server.directories.import 属性定义。这意味着我们提供的任何文件路径都是相对于此目录的。如果我们尝试从绝对路径(例如 /tmp/filename)读取,将会收到类似于以下的错误消息

Failed to invoke procedure: Caused by: java.lang.RuntimeException: Can’t read url or key file:/path/to/neo4j/import/tmp/filename as json: /path/to/neo4j//import/tmp/filename (No such file or directory)

我们可以通过在 apoc.conf 中设置以下属性来启用从文件系统任意位置读取文件

apoc.conf
apoc.import.file.use_neo4j_config=false

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

使用示例

我们可以通过将配置参数 method 设置为 GET 来向 JSON 端点执行 GET 请求。

以下示例向 Wikipedia Action API 发起 GET 请求

CALL apoc.load.jsonParams(
  "https://en.wikipedia.org/w/api.php?action=query&titles=Neo4j&format=json&formatversion=2",
  {method: "GET"},
  "",
  "$.query.pages[0]"
) YIELD value
RETURN value
结果

{ "title": "Neo4j", "ns": 0, "pageid": 25505874 }

请注意,URL 需要进行适当编码。这可以通过 apoc.text.urlencode 来实现。

WITH apoc.text.urlencode("Auvergne-Rhône-Alpes") AS title
CALL apoc.load.jsonParams(
  "https://en.wikipedia.org/w/api.php?action=query&titles="+title+"&format=json&formatversion=2",
  {method: "GET"}, "", "$.query.pages[0]"
) YIELD value
RETURN value.title AS title, value.pageid AS pageid
结果
标题 pageid

Auvergne-Rhône-Alpes"

45093325