PostgreSQL json_each_text() 函数使用指南

PostgreSQL json_each_text() 函数将一个指定的 JSON 对象顶层成员扩展为一个键值对(键和值都是文本类型)的集合。

json_each_text() 语法

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

json_each_text(any_object JSON) -> SETOF RECORD(key TEXT, value TEXT)

参数

any_object
必需的。 一个 JSON 对象。

返回值

PostgreSQL json_each_text() 函数返回一个键值对(键和值都是文本类型)的集合,其中的两列 keyvalue,分别对应了 JSON 对象中的最高层的键值对中的键和值。

json_each_text() 示例

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

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

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

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

这里返回了 2 列 keyvalue,分别对应了 JSON 对象中键值对的键和值。

注意,这里的 value 列的类型是文本 TEXT

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

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