⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
JSON Overview

DuckDB 支持用于从现有 JSON 中读取值和创建新 JSON 数据的 SQL 函数。 JSON 支持通过 json 扩展实现,该扩展随大多数 DuckDB 发行版一起提供,并在首次使用时自动加载。 如果您想手动安装或加载它,请参阅 “安装和加载”页面

关于 JSON

JSON 是一种开放标准的文件格式和数据交换格式,它使用人类可读的文本来存储和传输由属性-值对和数组(或其他可序列化的值)组成的数据对象。 虽然它不是表格数据的高效格式,但它非常常用,特别是作为数据交换格式。

最佳实践 DuckDB 实现了多种用于 JSON 提取的接口:JSONPathJSON Pointer。它们都可以与箭头操作符 (->) 和 json_extract 函数调用一起使用。最好选择一种语法并在整个应用程序中使用它。

索引

警告 遵循 PostgreSQL 的惯例,DuckDB 对其 ARRAYLIST 数据类型使用基于1的索引,但对 JSON 数据类型使用基于0的索引

Examples

加载 JSON

从磁盘读取一个JSON文件,自动推断选项:

SELECT * FROM 'todos.json';

使用带有自定义选项的read_json函数:

SELECT *
FROM read_json('todos.json',
               format = 'array',
               columns = {userId: 'UBIGINT',
                          id: 'UBIGINT',
                          title: 'VARCHAR',
                          completed: 'BOOLEAN'});

从标准输入读取一个JSON文件,自动推断选项:

cat data/json/todos.json | duckdb -c "SELECT * FROM read_json('/dev/stdin')"

将JSON文件读取到表中:

CREATE TABLE todos (userId UBIGINT, id UBIGINT, title VARCHAR, completed BOOLEAN);
COPY todos FROM 'todos.json';

或者,使用CREATE TABLE ... AS SELECT 子句创建表而不需要手动指定模式:

CREATE TABLE todos AS
    SELECT * FROM 'todos.json';

Writing JSON

将查询结果写入JSON文件:

COPY (SELECT * FROM todos) TO 'todos.json';

JSON 数据类型

创建一个带有用于存储JSON数据的列的表,并将数据插入其中:

CREATE TABLE example (j JSON);
INSERT INTO example VALUES
    ('{ "family": "anatidae", "species": [ "duck", "goose", "swan", null ] }');

获取JSON数据

检索家族键的值:

SELECT j.family FROM example;
"anatidae"

使用JSONPath表达式提取家族键的值:

SELECT j->'$.family' FROM example;
"anatidae"

使用JSONPath表达式提取家族键的值作为VARCHAR

SELECT j->>'$.family' FROM example;
anatidae

本节中的页面