Skip to content

PostgreSQL jsonb_each() 函数 ​

PostgreSQL jsonb_each() 函数将一个指定的 JSONB 对象扩展为一个键值对(键是文本类型,值是 JSONB 类型)的集合。

jsonb_each() 语法 ​

这是 PostgreSQL jsonb_each() 函数的语法:

sql
jsonb_each(any_object JSONB) -> SETOF RECORD(key TEXT, value JSONB)

参数 ​

  • any_object

    必需的。 一个 JSONB 对象。

返回值 ​

PostgreSQL jsonb_each() 函数返回一个键值对(键是文本类型,值是 JSONB 类型)的集合,其中的两列 key 和 value,分别对应了 JSONB 对象中的顶层的键值对中的键和值。

jsonb_each() 示例 ​

本示例展示了如何使用 PostgreSQL jsonb_each() 函数将一个 JSONB 对象扩展为一个键值对的集合。

sql
SELECT jsonb_each('{"name": "Tom", "age": 20, "hobbies": ["sports", "cars"]}');
bash
             jsonb_each
------------------------------------
 (name,"""Tom""")
 (age,20)
 (hobbies,"[""sports"", ""cars""]")

由于 jsonb_each() 函数返回值为 SETOF 类型,因此您可以在 SELECT * FROM 语句中使用 jsonb_each():

sql
SELECT
    *
FROM
    jsonb_each('{"name": "Tom", "age": 20, "hobbies": ["sports", "cars"]}');
bash
   key   |       value
---------+--------------------
 name    | "Tom"
 age     | 20
 hobbies | ["sports", "cars"]

这里返回了 2 列 key 和 value,分别对应了 JSONB 对象中键值对的键和值。

注意,这里的 value 列的类型是 JSONB。

您可以使用自定义列名,例如:

sql
SELECT
    *
FROM
    jsonb_each('{"name": "Tom", "age": 20, "hobbies": ["sports", "cars"]}')
    AS x(k, v);
bash
    k    |         v
---------+--------------------
 name    | "Tom"
 age     | 20
 hobbies | ["sports", "cars"]