json - 如何查询jsonb的嵌套数组

标签 json postgresql

我正在处理一个包含一列嵌套和多个 jsonb 对象的 PostgreSQL 11 表

模拟问题:-

CREATE TABLE public.test
(
  id integer NOT NULL DEFAULT nextval('test_id_seq'::regclass),
  testcol jsonb
)
insert into test (testcol) values 
('[{"type": {"value": 1, "displayName": "flag1"}, "value": "10"},
{"type": {"value": 2, "displayName": "flag2"}, "value": "20"}, 
{"type": {"value": 3, "displayName": "flag3"}, "value": "30"},
 {"type": {"value": 4, "displayName": "flag4"}},
 {"type": {"value": 4, "displayName": "flag4"}},
 {"type": {"value": 6, "displayName": "flag6"}, "value": "40"}]');

我正在尝试:

  1. 如果类型=特定值,则获取外部值。例如如果 flag3 在显示名称中,则获取值 30。
  2. 计算内部 json 中 flag4 的出现次数

最佳答案

您可以使用 json_to_recordset 来解析它:

WITH cte AS (
  SELECT  test.id, sub."type"->'value' AS t_value, sub."type"->'displayName' AS t_name, value
  FROM test
  ,LATERAL jsonb_to_recordset(testcol) sub("type" jsonb, "value" int)
)
SELECT *
FROM cte
-- WHERE ...
-- GROUP BY ...;

db<>fiddle demo

关于json - 如何查询jsonb的嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58307119/

相关文章:

json - 读取任意json数据到javafx treeview,只显示其中任意数组的第一个元素

java - Spring mvc Controller 将嵌套的 JSON 绑定(bind)到具有一对多关系的 POJO

python - simplejson:加载西类牙字符——utf-8

javascript - 尝试在 JavaScript 中迭代 JSON 数组时出错

postgresql异常运算符不存在: uuid = bytea

json - 如何将字符串作为 json 转换为简单字符串 - SwiftyJSON

postgresql - 如何允许在本地连接上没有密码提示的情况下登录 postgres?

sql - 理解多重连接的问题

mysql - 将查询转换为 hibernate 条件查询

sql - 将 PostgreSQL 表列中的默认值设置为查询中的值