Postgresql
如何將對象的非結構化數組變為行?
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
沒關係,找到答案了,必須先過濾null
SELECT p FROM Clients c, jsonb_array_elements(c.data->'programs') p WHERE (c.data->>'programs') <> 'null' -- or LENGTH(c.data->>'programs') > 0