jsonb_each() and json_each()
Purpose: Create a row set with columns "key" (as a SQL text
) and "value" (as a SQL jsonb
) from a JSON object.
Signature For the jsonb
variant:
input value: jsonb
return value: SETOF (text, jsonb)
Use this ysqlsh
script to create the required type "t" and then to execute the ASSERT
.
create type t as (k text, v jsonb);
do $body$
declare
object constant jsonb :=
'{"a": 17, "b": "dog", "c": true, "d": {"a": 17, "b": "cat"}}';
k_v_pairs t[] := null;
expected_k_v_pairs constant t[] :=
array[
('a', '17'::jsonb),
('b', '"dog"'::jsonb),
('c', 'true'::jsonb),
('d', '{"a": 17, "b": "cat"}'::jsonb)
];
k_v_pair t;
n int := 0;
begin
for k_v_pair in (
select key, value from jsonb_each(object)
)
loop
n := n + 1;
k_v_pairs[n] := k_v_pair;
end loop;
assert
k_v_pairs = expected_k_v_pairs,
'unexpected';
end;
$body$;