WITH NEW as ( SELECT $${ "gl": { "lines": [ { "amount": 2.19, "account": "h.food" }, { "amount": -2.19, "account": "h.dcard" } ], "jpath": [ [ "{item,0}", "{header}" ], [ "{item,0}", "{header}" ] ] }, "item": [ { "item": "green olives", "amount": 2.19, "reason": "food", "account": "h.food" } ], "header": { "entity": "home", "module": "MHI", "offset": "h.dcard", "transaction": "purchase" } }$$::jsonb bpr ) SELECT * FROM NEW --gl array hold each gl line LEFT JOIN LATERAL JSONB_ARRAY_ELEMENTS(NEW.bpr->'gl') WITH ORDINALITY gl(i, rn) ON TRUE --eaxpand the array of gl lines LEFT JOIN LATERAL JSONB_ARRAY_ELEMENTS(gl.i->'lines') WITH ORDINALITY a(i, rn) ON TRUE --for each LEFT JOIN LATERAL JSONB_ARRAY_ELEMENTS(gl.i->'jpath') WITH ORDINALITY p(i, rn) ON TRUE