遍历 PostgresQL 中的 json 字段

Traverse through a json field in PostgresSQL

我有一个名为 all_measures 的 table,它有一个名为 measures 的字段,其中包含一个 json 结构

{ "Composition" : { "Sales" : 85, "Trend" : 64, "Index" : 76, "Week" : 61 }, "Stores" : { "Sales" : 85, "Trend" : 64, "Index" : 76, "Week" : 61 }, "Online" : { "Sales" : 85, "Trend" : 64, "Index" : 76, "Week" : 61 } }

我想遍历此 json 并在 2 列中包含路径和 kpi。

这就是我 SQL 的能力。

SELECT  json_object_keys(fct.measures) path,
        json_object_keys(fct.measures::json->'Online') kpi
FROM all_measures market fct

结果:

          path          |           kpi                       
------------------------+------------------------
 Composition            | Sales
 Stores                 | Trend
 Online                 | Index
                        | Week

这就是我想要实现的目标。我如何得到这个结果?

     path               |           kpi                       
------------------------+------------------------
 Composition            | Sales
 Composition            | Trend
 Composition            | Index
 Composition            | Week
 Stores                 | Sales
 Stores                 | Trend
 Stores                 | Index
 Stores                 | Week
 Online                 | Sales
 Online                 | Trend
 Online                 | Index
 Online                 | Week

使用 cross join

SELECT m.path, x.kpi
FROM all_measures fct
  cross join jsonb_each(fct.measures) as m(path,v)
  cross join jsonb_each (m.v) as x(kpi,val)
order by m.path

Online example

demo:db<>fiddle

json_object_keys() 与第一个 运行 重复使用:

SELECT 
    path,
    kpi
FROM mytable,
    json_object_keys(mydata) as path,
    json_object_keys(mydata -> path) as kpi