如何计算以下JSON中的元素个数

How to count number of elements in the following JSON

我的元数据库 table 中有一列,其中的列条目如下所示:

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

我想获得净计数 text_fields checkbox_fields dropdown_fields

在这种情况下,所需的答案将是:2(1 个文本字段 + 0 个复选框字段 + 1 个下拉字段)

使用 jsonb_each 迭代对象 keys/values,使用 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)