【问题标题】:How to count number of elements in the following JSON如何计算以下 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 类型没有比较运算符。

标签: postgresql metabase


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2019-01-23
    相关资源
    最近更新 更多