如何将 JSON 对象推送到 postgresql jsonb 列中的数组

Raj*_*mar 5 postgresql append jsonb

我是在 postgresql 中使用 jsonb 的新手。

I have a following structure 

      [
          {
              "Id":1,
              "Name":"Emilia"
          },
          {
              "Id":2,
              "Name":"sophia"
          },
          {
              "Id":3,
              "Name":"Anna"
          },
          {
              "Id":4,
              "Name":"Marjoe"
          }
      ]
Run Code Online (Sandbox Code Playgroud)
  1. 此结构存储在 jsonb 列(项目)中。我需要追加{"Id":5,"Name":"Linquin"}到此数组中。并将其设置回 jsonb 列项目。

我需要这样的东西。

     [
          {
              "Id":1,
              "Name":"Emilia"
          },
          {
              "Id":2,
              "Name":"sophia"
          },
          {
              "Id":3,
              "Name":"Anna"
          },
          {
              "Id":4,
              "Name":"Marjoe"
          },
          {
              "Id":5,
              "Name":"Linquin"
          }
      ]
Run Code Online (Sandbox Code Playgroud)
  1. 请让我知道根据 id 删除对象的任何方法......

感谢任何帮助。谢谢...

San*_*ani 6

使用串联运算符 || 将元素附加到数组:

UPDATE s101
SET j = j || '{"Id":5,"Name":"Linquin"}'::jsonb
WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)


OTA*_*TAR 2

为了向数组添加新元素jsonb,正如@VaoTsun所说,您可以使用连接

select j||'{"Id":5,"Name":"Linquin"}'::jsonb as newjosn   from (
    select '[
      {
          "Id":1,
          "Name":"Emilia"
      },
      {
          "Id":2,
          "Name":"sophia"
      },
      {
          "Id":3,
          "Name":"Anna"
      },
      {
          "Id":4,
          "Name":"Marjoe"
      }
    ]'::jsonb as j
) t
Run Code Online (Sandbox Code Playgroud)

要根据 id 删除元素,一种方法是:(例如删除元素 which id=2

select to_jsonb(array_agg(lst)) as newjson from (
    select  jsonb_array_elements('[
      {
          "Id":1,
          "Name":"Emilia"
      },
      {
          "Id":2,
          "Name":"sophia"
      },
      {
          "Id":3,
          "Name":"Anna"
      },
      {
          "Id":4,
          "Name":"Marjoe"
      }
    ]'::jsonb) as lst
) t
where lst->'Id' <> '2'
Run Code Online (Sandbox Code Playgroud)

因此,该方法只是获取所有 json 数组值作为 json 元素的记录,然后选择除 element 之外的所有元素id=2,然后从所选记录中再次生成 json 数组。

请注意,如果您实际需要更新列,则此方法要求表应具有唯一/标识列(id通常为列),因为每个 json 数组应按其自己的id列进行分组。(不要将其id与 json 数组Id字段混合)。