Extrahiere Schlüssel, Wert von json Objekten in Postgres
Ich habe eine Postgres-Tabelle mit ähnlichem Inhalt:
id | data
1 | {"a":"4", "b":"5"}
2 | {"a":"6", "b":"7"}
3 | {"a":"8", "b":"9"}
Die erste Spalte ist eine Ganzzahl und die zweite eine JSON-Spalte.
Ich möchte in der Lage sein, die Schlüssel und Werte von json zu erweitern, damit das Ergebnis so aussieht:
id | key | value
1 | a | 4
1 | b | 5
2 | a | 6
2 | b | 7
3 | a | 8
3 | b | 9
Kann dies in Postgres SQL erreicht werden?
Was ich versucht habe
Gegeben, dass die Originaltabelle als solche simuliert werden kann:
select *
from
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)
Ich bekomme nur die Schlüssel mit:
select id, json_object_keys(data::json)
from
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)
Und ich kann sie wie folgt als Datensatz erhalten:
select id, json_each(data::json)
from
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)
Aber ich kann nicht herausfinden, wie ich das Ergebnis mit id, key und value erzielen kann.
Irgendwelche Ideen
Hinweis: Der echte Json, mit dem ich arbeite, ist bedeutend verschachtelter als dieser, aber ich denke, dieses Beispiel stellt mein zugrunde liegendes Problem gut dar.