Как посчитать количество элементов в следующем json? * Примечание: я новичок в json - PullRequest
0 голосов
/ 09 марта 2020

В моей таблице метабаз есть столбец, в котором запись столбца выглядит следующим образом:

{ “text_fields”: { “Weight”: “{:optional=>true, :priority=>4, :index=>false}” }, “checkbox_fields”: {}, “dropdown_fields”: { “Brand Name”: “{:optional=>false, :priority=>1, :index=>false, :options=>[“Non Branded”]}” }}

Я хочу получить net счетчик text_fields checkbox_fields dropdown_fields

Требуемый В этом случае ответом будет: 2 (1 текстовое поле + 0 флажок + 1 раскрывающееся поле)

Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 09 марта 2020

Используйте jsonb_each для перебора ключей / значений объекта и jsonb_object_keys только для извлечения ключей.

Пример (с включенными примерами данных):

SELECT * FROM mytable ;
                                          mycolumn                                           
---------------------------------------------------------------------------------------------
 {"text_fields": {"Weight": 1}, "checkbox_fields": {}, "dropdown_fields": {"Brand Name": 1}}
(1 row)


SELECT *,
  (SELECT sum((SELECT count(*) FROM jsonb_object_keys(v1)))
   FROM jsonb_each(mycolumn) AS j1(k1,v1)
   WHERE k1 IN ('text_fields', 'checkbox_fields', 'dropdown_fields')
  ) AS mytotal
FROM mytable;

                                          mycolumn                                           | mytotal 
---------------------------------------------------------------------------------------------+---------
 {"text_fields": {"Weight": 1}, "checkbox_fields": {}, "dropdown_fields": {"Brand Name": 1}} |       2
(1 row)
...