使用 Postgres 查询 JSON 数据

NoSQL 入门

Jake Roach

Data Engineer

使用 Postgres 查询 JSON 数据

两个表:一个包含单列 JSON,另一个显示从 parent_meta 列提取信息的查询结果。

-> 运算符

  • 传入键,返回字段(JSON)

->> 运算符

  • 传入键,返回字段(文本)

$$

SELECT
    parent_meta -> 'guardian' AS guardian
    parent_meta ->> 'status' AS status
FROM student;
NoSQL 入门

查询嵌套 JSON 对象

两个表:一个包含单列 JSON,另一个显示从 parent_meta 列提取信息的查询结果。

查询嵌套 JSON 对象:

  • 组合使用 ->->>
  • 先返回嵌套对象
  • 再提取字段

$$

SELECT
    parent_meta -> 'jobs' ->> 'P1' AS jobs_P1,
    parent_meta -> 'jobs' ->> 'P2' AS jobs_P2
FROM student;
NoSQL 入门

查询 JSON 数组

两个表:一个包含单列 JSON,另一个显示从 parent_meta 列提取信息的查询结果。

访问 JSON 数组元素:

  • -> 传入 INT,返回字段(JSON)
  • ->> 传入 INT,返回字段(文本)

$$

SELECT
    parent_meta -> 'educations' ->> 0
    parent_meta -> 'educations' ->> 1
FROM student;
NoSQL 入门

确定 JSON 对象中存储的数据类型

两个表:一个包含单列 JSON,另一个将 JSON 对象的类型作为单列输出。

json_typeof 函数

  • 返回最外层对象的类型
  • 搭配 -> 使用
  • 便于调试与构建查询
  • 通常不与 ->> 一起用

$$

SELECT
    json_typeof(parent_meta -> 'jobs')
FROM students;
NoSQL 入门

复习

SELECT
    -- 顶层字段
    <column-name> -> '<field-name>' AS <alias>,
    <column-name> ->> '<field-name>' AS <alias>,

    -- 嵌套字段
    <column-name> -> '<parent-field-name>' ->> '<nested-field-name>' AS <alias>,

    -- 数组
    <column-name> -> '<parent-field-name>' -> 0 AS <alias>,
    <column-name> -> '<parent-field-name>' ->> 1 AS <alias>,

    -- 类型
    json_typeof(<column-name> -> <field-name>) AS <alias>
FROM <table-name>;
NoSQL 入门

Passons à la pratique !

NoSQL 入门

Preparing Video For Download...