2016-07-05 15 views
1

I JSON Daten haben, wie folgt:PostgreSql Traverse durch ein Array Ergebnisse in mehreren Reihen unter gleichen Spalte zu holen

"group_nw4qu40":[ 
{"group_nw4qu40/Special_Characteristics":"11"}, 
{"group_nw4qu40/Special_Characteristics":"0"}, 
{"group_nw4qu40/Special_Characteristics":"0"}, 
{"group_nw4qu40/Special_Characteristics":"1"}, 
{"group_nw4qu40/Special_Characteristics":"1"}] 

My Aufgabe Traverse ist, obwohl die Array innerhalb einer Anordnung, die „Special_Characteristic“ jeder zu holen einzelnes Mitglied und erstellen Sie eine Tabelle mit diesen Werten in mehreren Zeilen unter derselben Spalte.

Ich habe versucht, mit dieser Abfrage, aber es holt mich Werte in mehreren Spalten, die für mich falsch ist.

select id AS id, (json->'group_nw4qu40'->>0)::json->>'group_nw4qu40/Special_Characteristics' AS value_of_special_characteristic from public.logger_instance where id = 5215 

Bitte helfen Sie mir, diese Werte in mehreren Zeilen unter derselben Spalte zu erhalten.

Antwort

1

Verwenden jsonb_array_elements() or json_array_elements(), z.B .:

with the_data (json) as (
    values (
     '{"group_nw4qu40":[ 
     {"group_nw4qu40/Special_Characteristics":"11"}, 
     {"group_nw4qu40/Special_Characteristics":"0"}, 
     {"group_nw4qu40/Special_Characteristics":"0"}, 
     {"group_nw4qu40/Special_Characteristics":"1"}, 
     {"group_nw4qu40/Special_Characteristics":"1"}]}'::jsonb) 
    ) 
select e->>'group_nw4qu40/Special_Characteristics' value_of_special_characteristic 
from the_data, jsonb_array_elements(json->'group_nw4qu40') e 

value_of_special_characteristic 
--------------------------------- 
11 
0 
0 
1 
1 
(5 rows) 

Ihre eigentliche Abfrage sollte wie folgt aussehen:

select id, e->>'group_nw4qu40/Special_Characteristics' value_of_special_characteristic 
from public.logger_instance, jsonb_array_elements(json->'group_nw4qu40') e 
where id = 5215; 
+0

funktioniert wie ein Charme – Mufaddal