首页 > 解决方案 > 将 JSON 对象添加到 Postgres 中的特定键

问题描述

我有一个具有这种结构的 JSON:

[
   {
      "myKey":[
         {
            "value":1
         },
         {
            "value":2
         }
      ],
      "secondKey":[
         {
            "value":1
         },
         {
            "value":2
         }
      ]
   }
]

而且我需要添加评估密钥的对象,例如,myKey添加:

[
   {
      "myKey":[
         {
            "value":1
         },
         {
            "value":2
         },
         {
            "new value":3
         }
      ],
      "secondKey":[
         {
            "value":1
         },
         {
            "value":2
         }
      ]
   }
]

考虑到我只是使用 postgres 选择和程序,正确的方法是什么。

标签: sqljsonpostgresql

解决方案


jsonb_set与与 . 连接的原始myKey数组一起使用{"new value":3}。CTEt(j)仅用于演示。

with t(j) as ( values (
'[{
   "myKey":[{"value":1}, {"value":2}], "secondKey":[{"value":1},{"value":2}]
 }]'::jsonb))

SELECT jsonb_set(j, '{0, myKey}', j->0->'myKey' || '{"new value":3}')
FROM t;

结果:

[
  {
    "myKey": [
      {
        "value": 1
      },
      {
        "value": 2
      },
      {
        "new value": 3
      }
    ],
    "secondKey": [
      {
        "value": 1
      },
      {
        "value": 2
      }
    ]
  }
]

您可能更喜欢使用jsonb_build_object('new value', 3)而不是'{"new value":3}'.


推荐阅读