PostgreSQL jsonb_object() 函数使用指南

PostgreSQL jsonb_object() 函数从一个文本数组构建一个 JSONB 对象,或者从两个分别作为键和值的数组构建一个 JSONB 对象。

jsonb_object() 语法

PostgreSQL jsonb_object() 函数的语法有两种形式:

jsonb_object(kv_array TEXT[]) -> JSONB

或者

jsonb_object(k_array TEXT[], v_array TEXT[]) -> JSONB

参数

kv_array
必需的。 一个文本数组。他可以是一个一维数组,它必须由偶数个元素,且由交替的作为键和值的元素组成。它也可以是一个二维数组,且每个内部数组必须具有两个元素,他们的作为键和值。
k_array
必需的。 一个包含了键的文本数组。其中的元素和值数组中的元素一一对应组成键值对。
v_array
必需的。 一个包含了值的文本数组。其中的元素和键数组中的元素一一对应组成键值对。

返回值

PostgreSQL jsonb_object() 函数返回一个 JSONB 对象。

jsonb_object() 函数会评估可变参数列表中的每个参数,所有的值都转换为 JSONB 字符串。

单个数组参数形式中的数组中的元素数量必须是偶数, 否则 PostgreSQL 会给出一个错误。

两个数组参数形式中的键数组和值数组必须具有相同数量的元素, 否则 PostgreSQL 会给出一个错误。

jsonb_object() 示例

示例 1

以下示例展示了如何使用 PostgreSQL jsonb_object() 函数从一个一维数组构建一个 JSONB 对象。

SELECT jsonb_object(ARRAY[1, 'a', true, row(2, 'b', false)]::TEXT[]);
         jsonb_object
-------------------------------
 {"1": "a", "true": "(2,b,f)"}

这里对于单参数形式中的以为数组来说,数组中的元素作为交替的键和值使用:

  • 1 被用作键
  • 'a' 被用作值
  • true 被用作键
  • row(2, 'b', false) 被用作值

示例 2

以下示例展示了如何使用 PostgreSQL jsonb_object() 函数从一个二维数组构建一个 JSONB 对象。

SELECT jsonb_object('{{1, 2}, {3, 4}, {a, 6}}');
          jsonb_object
--------------------------------
 {"1": "2", "3": "4", "a": "6"}

这里,每个二维数组中的内部数组的两个元素分别作为键和值:

  • {1, 2} 中, 1 被用作键, 2 被用作值
  • {3, 4} 中, 3 被用作键, 4 被用作值
  • {a, 6} 中, a 被用作键, 6 被用作值

示例 3

本示例展示了如何使用 PostgreSQL jsonb_object() 函数从两个一维数组构建一个 JSONB 对象。

SELECT jsonb_object('{x, y}', '{1, 2}');
     jsonb_object
----------------------
 {"x": "1", "y": "2"}

这里,键数组 {x, y} 和值数组 {1, 2} 中的元素一一对应形成键值对。