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

Posted

技术标签:

【中文标题】如何计算以下 JSON 中的元素数【英文标题】:How to count number of elements in the following JSON 【发布时间】:2020-03-09 05:21:42 【问题描述】:

我的 Metabase 表中有一个列,其中列条目如下所示:

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

我想得到一个净计数 文本字段 复选框字段 下拉字段

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

【问题讨论】:

使用json_each function 然后只使用count() 结果由key 分组/过滤 嗨@Abelisto,谢谢您的回答。也许我用错了这个函数,但我也希望所有其他列也存在。函数 json each 在 from 子句中工作,如下所示: Select * from json each(json) 但我的字段是大表中的一列,我也想要所有其他数据。还有其他解决方案吗?这给了我一个语法错误。 @IshanPurohit 您的问题缺少create table 详细信息,因此我们不知道表结构 @IshanPurohit 您的 JSON 无效 - 您能否使用“编辑帖子”并修复您输入的示例数据? @IshanPurohit (values(1::int, '"a": "x":1, "b": '::json)) select *, (select count(*) from json_each(j) where key in ('a', 'b') and not value::jsonb = ''::jsonb) from t; 请注意转换为jsonb 类型的值,因为json 类型没有比较运算符。 【参考方案1】:

使用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)

【讨论】:

以上是关于如何计算以下 JSON 中的元素数的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL 计算 JSON 中的匹配数?

如何计算表中所有 Oracle 可变数组中的元素数?

如何计算 JSON 数据中的项目

计算熊猫单元格中字符串中的元素数

使用带有 LINQ 的 JSON.NET 计算我的 JSON 文件中的子项数

计算存储为 Hive 字符串列的 JSON 数组中的对象数