如何向嵌套的jsonb数组添加值[重复]

问题描述 投票:0回答:1

我有一个

jsonb
近似结构值:

'{
    "a": {
        "result": 10,
        "values": [
           {"date": "2024-11-10", "question": 5},
           {"date": "2024-11-11", "question": 10}
        ]
    }
}'

我需要向“values”数组添加另一个对象:

{"date": "2024-11-12", "question": 1}

预期结果:

'{
    "a": {
        "result": 10,
        "values": [        [
           {"date": "2024'-11-10", "question": 5},
           {"date": "2024'-11-11", "question": 10},
           {"date": "2024'-11-12", "question": 1}
        ]
    }
}'

如何在 Postgres 中实现这一点?

postgresql jsonb
1个回答
0
投票

有多种方法可以实现所描述的结果。一种方法是使用

JSONB_INSERT
追加到
values
数组。

WITH
  t (test_value) AS (
    VALUES
      ('{
          "a": {
            "result": 10,
            "values": [
              {
                "date": "2024-11-10",
                "question": 5
              },
              {
                "date": "2024-11-11",
                "question": 10
              }
            ]
          }
        }'::JSONB
      )
  )
SELECT
  JSONB_INSERT(
    t.test_value,
    '{a, values, -1}',
    '{"date": "2024-11-12", "question": 1}',
    TRUE
  )
FROM
  t;

JSONB_INSERT
的调用用于查找
values
数组,并在最后一个元素之后插入新的 JSONB 对象(请参阅 表 9.49.JSON 处理函数,了解“JSONB_INSERT”的说明)。

结果是:

{
  "a": {
    "result": 10,
    "values": [
      {
        "date": "2024-11-10",
        "question": 5
      },
      {
        "date": "2024-11-11",
        "question": 10
      },
      {
        "date": "2024-11-12",
        "question": 1
      }
    ]
  }
}

此方法应该适用于所有当前支持的 PostgreSQL 版本(使用 v16 和 v17 进行测试)。

© www.soinside.com 2019 - 2024. All rights reserved.