如何删除json数组元素中的对象?

时间:2019-10-25 01:57:42

标签: sql json postgresql jsonb

假设我具有这种json格式:

[
    {
       "firstName": "John", 
       "lastName": "Doe"
    }
]

我想删除“姓氏”,该怎么办?

到目前为止,我有这个查询,它可以工作,但是问题是它添加了另一个数组

UPDATE person
SET 
    field = jsonb_set(field::jsonb, 
    '{0}', 
    field::jsonb #- '{0,lastName}',
    false)

我上面查询的结果:

[
    [
       {
           "firstName": "John"
       }
    ]
]

我想要的结果:

[
    {
       "firstName": "John"
    }
]

4 个答案:

答案 0 :(得分:1)

在第三个参数中使用数组的第一个元素(而不是整个数组):

UPDATE person
SET 
    field = jsonb_set(field::jsonb, 
    '{0}', 
    (field::jsonb->0) - 'lastName',
    false)

答案 1 :(得分:0)

在这种情况下,不必要的jsonb_set导致了问题。摆脱它。

UPDATE person
SET 
    field = field::jsonb #- '{0,lastName}'

答案 2 :(得分:-1)

您可以尝试使用REGEXP_REPLACE。

超级基本模式类似于"lastName":"[a-zA-Z]*"

要获得更好的效果,请参见regular expression for first and last name

答案 3 :(得分:-2)

我可以说这是不可能的。请不要尝试。