Postgresql

如何將對象的非結構化數組變為行?

  • June 27, 2022

c.data是jsonb對象,像這樣:{programs:[{...},{...}]}

c.data->'programs'是 jsonb 數組,像這樣[{a:1},{b:2},{c:3,d:4}]null

已經嘗試過這個:

SELECT p
FROM Clients c , jsonb_array_elements(c.data->'programs') p

或這個

SELECT p
FROM Clients c , jsonb_array_elements(COALESCE(c.data->'programs','[]'::JSONB)) p

但它顯示一個錯誤:

[22023] ERROR: cannot extract elements from a scalar

如何將裡面的對象檢索為對象data->'programs'行?

您可以改用 JSON 路徑,使用該jsonb_path_query函式。

SELECT p
FROM Clients c
CROSS JOIN LATERAL jsonb_path_query(c.data, '$.programs') p

db<>小提琴

沒關係,找到答案了,必須先過濾null

SELECT p
FROM Clients c, jsonb_array_elements(c.data-&gt;'programs') p
WHERE (c.data-&gt;&gt;'programs') &lt;&gt; 'null'
-- or LENGTH(c.data-&gt;&gt;'programs') &gt; 0

引用自:https://dba.stackexchange.com/questions/313812