PostgreSQL json_to_record() 函数使用指南

PostgreSQL json_to_record() 函数将指定的最顶层的 JSON 对象扩展为一个在 AS 子句中定义的具有符合类型的行。

json_to_record() 语法

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

json_to_record(from_json JSON) -> RECORD

参数

from_json
必需的。 要转的 JSON 对象。

返回值

PostgreSQL json_to_record() 函数返回一个在 AS 子句中定义的 RECORD 类型值,它由指定的 JSON 对象转换而来。 JSON 对象都依照 json_populate_record() 函数被转成 RECORD 类型的值。

json_to_record() 示例

本示例展示了如何使用 PostgreSQL json_to_record() 函数将一个 JSON 对象转为一个具有复杂类型的行。

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

这里,我们在 AS 子句中定义了要返回的行类型: AS x(name TEXT, age INT, hobbies TEXT[])

您还可以结合自定义的类型使用更复杂的类型。

首先,让我们创建一个自定义的 SQL 类型:

CREATE TYPE address as (country TEXT, city TEXT);

然后将一个更复杂的 JSON 对象转为行:

SELECT
  *
FROM
  json_to_record(
    '{"name": "Tom", "age": 20, "hobbies": ["sports", "cars"], "address": {"country": "CN", "city": "BeiJing"}}'
  ) AS x(name TEXT, age INT, hobbies TEXT[], address address);
 name | age |    hobbies    |   address
------+-----+---------------+--------------
 Tom  |  20 | {sports,cars} | (CN,BeiJing)