我正在嘗試通過傳遞給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[]第二個陣列末尾的型別轉換。
uj5u.com熱心網友回復:
的檔案json_object說:
所有值都轉換為 JSON 字串。
因此,json_object如果您想要任意 JSON 值而不是字串,請不要使用。
相反,使用json_object_agg:
SELECT json_object_agg(key, value)
FROM UNNEST(array_of_keys, array_of_values) AS kv(key, value)
(帶有您的示例資料的在線演示)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/440672.html
標籤:数组 json PostgreSQL 嵌套的
上一篇:從陣列中獲取資料屬性
