Как удалить объект в элементе массива json? - PullRequest
1 голос
/ 25 октября 2019

Допустим, у меня есть этот формат json:

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

, и я хочу удалить «lastName», как я могу это сделать?

Пока у меня есть этот запрос и онработает, но проблема в том, что он добавляет еще один массив

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

Результат моего запроса выше:

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

Результат, который я хочу:

[
    {
       "firstName": "John"
    }
]

Ответы [ 4 ]

1 голос
/ 25 октября 2019

Используйте первый элемент массива (не весь массив) в третьем параметре:

UPDATE person
SET 
    field = jsonb_set(field::jsonb, 
    '{0}', 
    (field::jsonb->0) - 'lastName',
    false)
0 голосов
/ 25 октября 2019

Ненужный jsonb_set вызывает проблему в этом случае. Избавься от этого.

UPDATE person
SET 
    field = field::jsonb #- '{0,lastName}'
0 голосов
/ 25 октября 2019

Вы можете попробовать с REGEXP_REPLACE.

Супер базовый шаблон будет выглядеть примерно так: "lastName":"[a-zA-Z]*".

Для лучшего понимания смотрите регулярное выражение для имени и фамилии .

0 голосов
/ 25 октября 2019

Я могу сказать, что это невозможно. Пожалуйста, не пытайтесь.

...