在 postgresql 中创建嵌套 json
Create nested json in postgresql
我试图通过传递给 json_object()
两个数组来创建 JSON 对象。一个带有键,第二个带有 JSON(或 JSONB) 对象。以便将 JSON 作为预定义键的值。
json_object()
函数的签名是 json_object(varchar[], varchar[])
但在我的例子中我有 json_object(varchar[], json[])
。问题是当我进行类型转换时 json_object(varchar[], json[]::varchar[])
字符串化为 json 元素创建转义字符串,而 postgress 不将值识别为嵌套 JSON,而是认为这是字符串值。
SELECT
json_object(
ARRAY[set_of_keys::varchar],
ARRAY[set_of_values::json],
) as some_column
给出错误function json_object(varchar[], json[]) does not exist
SELECT
json_object(
ARRAY[set_of_keys::varchar],
ARRAY[set_of_values::json]::varchar[],
) as some_column
导致 set_of_values
.
的逃逸字符串化
如何在不进行字符串化的情况下将这些对象作为值?
示例数据:
SELECT
json_object(
ARRAY['a', 'b', 'c'],
ARRAY['{"key1":"value1"}'::json, '{"key2": "value2"}'::json, '{"key3": "value3", "key4":"value4"}'::json]::varchar[]
)
我想去掉第二个数组末尾的 ::varchar[]
类型转换。
The documentation of json_object
说:
All values are converted to JSON strings.
因此,如果您想要任意 JSON 值而不是字符串,请不要使用 json_object
。
而是使用 json_object_agg
:
SELECT json_object_agg(key, value)
FROM UNNEST(array_of_keys, array_of_values) AS kv(key, value)
(Online demo 用你的样本数据)
我试图通过传递给 json_object()
两个数组来创建 JSON 对象。一个带有键,第二个带有 JSON(或 JSONB) 对象。以便将 JSON 作为预定义键的值。
json_object()
函数的签名是 json_object(varchar[], varchar[])
但在我的例子中我有 json_object(varchar[], json[])
。问题是当我进行类型转换时 json_object(varchar[], json[]::varchar[])
字符串化为 json 元素创建转义字符串,而 postgress 不将值识别为嵌套 JSON,而是认为这是字符串值。
SELECT
json_object(
ARRAY[set_of_keys::varchar],
ARRAY[set_of_values::json],
) as some_column
给出错误function json_object(varchar[], json[]) does not exist
SELECT
json_object(
ARRAY[set_of_keys::varchar],
ARRAY[set_of_values::json]::varchar[],
) as some_column
导致 set_of_values
.
如何在不进行字符串化的情况下将这些对象作为值?
示例数据:
SELECT
json_object(
ARRAY['a', 'b', 'c'],
ARRAY['{"key1":"value1"}'::json, '{"key2": "value2"}'::json, '{"key3": "value3", "key4":"value4"}'::json]::varchar[]
)
我想去掉第二个数组末尾的 ::varchar[]
类型转换。
The documentation of json_object
说:
All values are converted to JSON strings.
因此,如果您想要任意 JSON 值而不是字符串,请不要使用 json_object
。
而是使用 json_object_agg
:
SELECT json_object_agg(key, value)
FROM UNNEST(array_of_keys, array_of_values) AS kv(key, value)
(Online demo 用你的样本数据)