Me gustaría extraer datos usando SQL en Postgres, pero me gustaría ingresar al resultado de JSON y solo extraer los datos que necesito.
Si escribo (en el estudio de Valentina):
Select "data" from "cars"La primera fila se parece a:
[{"Model": "Golf", "Make": "VW", "Engine": "2.9"}, {"Model": "M3", "Make": "BMW", "Engine": "3.0"}]Lo que me gustaría es simplemente:
Golf, M3 o "Golf", "M3"
Entonces también podría usar el mismo método para "Make" o "Engine"
Esencialmente, no quiero mis resultados en JSON.
Utilice json_array_elements() :
with cars(data) as ( values ('[ {"Model": "Golf", "Make": "VW", "Engine": "2.9"}, {"Model": "M3", "Make": "BMW", "Engine": "3.0"} ]'::json) ) select elem->>'Model' as model, elem->>'Make' as make, elem->>'Engine' as engine from cars, lateral json_array_elements(data) elem model | make | engine -------+------+-------- Golf | VW | 2.9 M3 | BMW | 3.0 (2 rows)SELECT string_agg(x->>'Model', ',') FROM cars CROSS JOIN LATERAL jsonb_array_elements(data) x GROUP BY cars; ┌────────────┐ │ string_agg │ ├────────────┤ │ Golf,M3 │ └────────────┘ (1 row)Creo que también obtuve lo que quería (y lo derretí de la forma en que planeaba hacerlo) con:
select obj->'Model' as model, obj->'Make' as make, obj->'Engine' as engine from data n, jsonb_array_elements(n.DATA) as objde lo anterior también puedo usar:
select elem->>'Model' as model, elem->>'Make' as make , elem->>'Engine' as engine from cars, lateral jsonb_array_elements(data) elem;¡Gracias por la ayuda!