Анализ Json postgresql

#json #postgresql

Вопрос:

Когда я пишу запрос postgresql, одна из моих ячеек находится в формате json. Я хочу проанализировать небольшую часть JSON на основе критериев. Например, это формат json

 [
{"status":"active","text":"Not Pitched: Failed Credit","id":11,"color":"DCEBD8","selected":false},
{"status":"active","text":"Not Pitched: No Show","id":3,"color":"DCEBD8","selected":false},
{"status":"active","text":"Not Pitched: No Tax Incentive","id":7,"color":"DCEBD8","selected":false},
{"status":"active","text":"Not Pitched: Shaded","id":8,"color":"DCEBD8","selected":false},
{"status":"active","text":"Not Pitched: Other (See Notes)","id":2,"color":"DCEBD8","selected":true},
{"status":"active","text":"Not Pitched: Renter","id":9,"color":"DCEBD8","selected":false},
{"status":"active","text":"Pitched: Not Interested","id":5,"color":"DCEBD8","selected":false},
{"status":"active","text":"Pitched: Pending","id":10,"color":"DCEBD8","selected":false},
{"status":"active","text":"Pitched: Closed","id":1,"color":"DCEBD8","selected":false},
{"status":"active","text":"Pitched: Missed","id":6,"color":"DCEBD8","selected":false},
{"status":"active","text":"Pitched: Manually Set by Fluent","id":12,"color":"DCEBD8","selected":false},
{"status":"deleted","text":"Not Pitched: Other (See Notes)","id":4,"color":"DCEBD8","selected":false}
]
 

Основываясь на «Выбранном»: Верно, я хочу вытащить «Текст»:(Я хочу только этот единственный ответ в своей ячейке). таким образом, в этом примере это не было бы подано: Другое

заранее спасибо

Ответ №1:

Приведенный ниже запрос должен работать для вас

 select tmp.value1 -> 'text' as TEXT, json_data.key, json_data.VALUE FROM
(select json_array_elements('[{"status":"active","text":"Not Pitched: Failed Credit","id":11,"color":"DCEBD8","selected":false},{"status":"active","text":"Not Pitched: No Show","id":3,"color":"DCEBD8","selected":false},{"status":"active","text":"Not Pitched: No Tax Incentive","id":7,"color":"DCEBD8","selected":false},{"status":"active","text":"Not Pitched: Shaded","id":8,"color":"DCEBD8","selected":false},{"status":"active","text":"Not Pitched: Other (See Notes)","id":2,"color":"DCEBD8","selected":true},{"status":"active","text":"Not Pitched: Renter","id":9,"color":"DCEBD8","selected":false},{"status":"active","text":"Pitched: Not Interested","id":5,"color":"DCEBD8","selected":false},{"status":"active","text":"Pitched: Pending","id":10,"color":"DCEBD8","selected":false},{"status":"active","text":"Pitched: Closed","id":1,"color":"DCEBD8","selected":false},{"status":"active","text":"Pitched: Missed","id":6,"color":"DCEBD8","selected":false},{"status":"active","text":"Pitched: Manually Set by Fluent","id":12,"color":"DCEBD8","selected":false},{"status":"deleted","text":"Not Pitched: Other (See Notes)","id":4,"color":"DCEBD8","selected":false}]') as value1) tmp,
 json_each_text(tmp.value1::json) json_data
 where json_data.key = 'selected'
 and json_data.VALUE = 'true'
 

Ответ №2:

Это должно сработать (используется один оператор select, json_array_elements который намного быстрее и оптимизирован).

 
SELECT value->'text' AS text ,
       value->'selected' AS selected
FROM json_array_elements('[{"status":"active","text":"Not Pitched: Failed Credit","id":11,"color":"DCEBD8","selected":false},{"status":"active","text":"Not Pitched: No Show","id":3,"color":"DCEBD8","selected":false},{"status":"active","text":"Not Pitched: No Tax Incentive","id":7,"color":"DCEBD8","selected":false},{"status":"active","text":"Not Pitched: Shaded","id":8,"color":"DCEBD8","selected":false},{"status":"active","text":"Not Pitched: Other (See Notes)","id":2,"color":"DCEBD8","selected":true},{"status":"active","text":"Not Pitched: Renter","id":9,"color":"DCEBD8","selected":false},{"status":"active","text":"Pitched: Not Interested","id":5,"color":"DCEBD8","selected":false},{"status":"active","text":"Pitched: Pending","id":10,"color":"DCEBD8","selected":false},{"status":"active","text":"Pitched: Closed","id":1,"color":"DCEBD8","selected":false},{"status":"active","text":"Pitched: Missed","id":6,"color":"DCEBD8","selected":false},{"status":"active","text":"Pitched: Manually Set by Fluent","id":12,"color":"DCEBD8","selected":false},{"status":"deleted","text":"Not Pitched: Other (See Notes)","id":4,"color":"DCEBD8","selected":false}]'::json)
WHERE (value->>'selected')::boolean IS TRUE;

               text               | selected
---------------------------------- ----------
 "Not Pitched: Other (See Notes)" | true
(1 row)
 

Ответ №3:

 select v ->> 'text' text_true
from json_array_elements
(
 json '[{"status":"active","text":"Not Pitched: Failed Credit","id":11,"color":"DCEBD8","selected":false}, {"status":"active","text":"Not Pitched: No Show","id":3,"color":"DCEBD8","selected":false}, {"status":"active","text":"Not Pitched: No Tax Incentive","id":7,"color":"DCEBD8","selected":false}, {"status":"active","text":"Not Pitched: Shaded","id":8,"color":"DCEBD8","selected":false}, {"status":"active","text":"Not Pitched: Other (See Notes)","id":2,"color":"DCEBD8","selected":true}, {"status":"active","text":"Not Pitched: Renter","id":9,"color":"DCEBD8","selected":false}, {"status":"active","text":"Pitched: Not Interested","id":5,"color":"DCEBD8","selected":false}, {"status":"active","text":"Pitched: Pending","id":10,"color":"DCEBD8","selected":false}, {"status":"active","text":"Pitched: Closed","id":1,"color":"DCEBD8","selected":false}, {"status":"active","text":"Pitched: Missed","id":6,"color":"DCEBD8","selected":false}, {"status":"active","text":"Pitched: Manually Set by Fluent","id":12,"color":"DCEBD8","selected":false}, {"status":"deleted","text":"Not Pitched: Other (See Notes)","id":4,"color":"DCEBD8","selected":false}]'
) v
where (v ->> 'selected')::boolean;