⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
JSON 格式设置

当将 format 设置为 auto 时,JSON 扩展可以尝试确定 JSON 文件的格式。以下是一些示例 JSON 文件以及应使用的相应 format 设置。

在下述每种情况下,其实都不需要设置 format,因为 DuckDB 能够正确推断出它,但此处为了说明起见将其包含在内。这种形式的查询在每种情况下都能正常工作

SELECT *
FROM filename.json;

格式:newline_delimited

使用 format = 'newline_delimited' 可以解析换行符分隔的 JSON。每一行都是一个 JSON 对象。

我们使用示例文件 records.json,其内容如下

{"key1":"value1", "key2": "value1"}
{"key1":"value2", "key2": "value2"}
{"key1":"value3", "key2": "value3"}
SELECT *
FROM read_json('records.json', format = 'newline_delimited');
key1 key2
value1 value1
value2 value2
value3 value3

格式:array

如果 JSON 文件包含一个 JSON 对象数组(无论是否经过美化打印),可以使用 array_of_objects。为了演示其用法,我们使用示例文件 records-in-array.json

[
    {"key1":"value1", "key2": "value1"},
    {"key1":"value2", "key2": "value2"},
    {"key1":"value3", "key2": "value3"}
]
SELECT *
FROM read_json('records-in-array.json', format = 'array');
key1 key2
value1 value1
value2 value2
value3 value3

格式:unstructured

如果 JSON 文件包含既不是换行符分隔也不是数组格式的 JSON,则可以使用 unstructured。为了演示其用法,我们使用示例文件 unstructured.json

{
    "key1":"value1",
    "key2":"value1"
}
{
    "key1":"value2",
    "key2":"value2"
}
{
    "key1":"value3",
    "key2":"value3"
}
SELECT *
FROM read_json('unstructured.json', format = 'unstructured');
key1 key2
value1 value1
value2 value2
value3 value3

records 选项

当设置 records = auto 时,JSON 扩展可以尝试确定 JSON 文件是否包含记录。当 records = true 时,JSON 扩展会期望 JSON 对象,并将 JSON 对象的字段解包为单独的列。

继续使用相同的示例文件 records.json

{"key1":"value1", "key2": "value1"}
{"key1":"value2", "key2": "value2"}
{"key1":"value3", "key2": "value3"}
SELECT *
FROM read_json('records.json', records = true);
key1 key2
value1 value1
value2 value2
value3 value3

records = false 时,JSON 扩展不会解包顶层对象,而是改为创建 STRUCT

SELECT *
FROM read_json('records.json', records = false);
json
{'key1': value1, 'key2': value1}
{'key1': value2, 'key2': value2}
{'key1': value3, 'key2': value3}

如果我们有非对象的 JSON,例如 arrays.json,这尤其有用

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
SELECT *
FROM read_json('arrays.json', records = false);
json
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南