поле проверки json postgresql содержит

#json #postgresql

#json #postgresql

Вопрос:

У меня есть некоторая структура json, и попробуйте проверить, содержит ли строка какое-либо значение? Мне нужно проверить, содержит ли оно 222 слова.

Например:

 {
    "words": "111, 222"
}
  

Комментарии:

1. Вы должны, по крайней мере, сохранить этот список значений в виде массива JSON, а не строки, разделенной запятыми

2. вопрос не о массиве

3. Да, но это должно быть. Ваш пример лучше было бы сохранить как { "words": ["111, 222"]} , что значительно упрощает доступ к каждому элементу в списке. Хранение значений, разделенных запятыми, в одной строке всегда является плохим выбором для начала. И это также включает JSON.

Ответ №1:

Если вы хотите проверить, доступно 222 в строке или нет, попробуйте включить функцию

ИМЯ_ОБЪЕКТА.words.includes(«222»); // это дает вам true

ИМЯ_ОБЪЕКТА.words.includes(«22222»); // это дает вам значение false

Комментарии:

1. Я думаю, что PingWin хочет решение SQL / Postgres

Ответ №2:

Вы могли бы использовать LIKE

 SELECT ', ' || ('{"words": "111, 222"}'::json->>'words') || ', ' LIKE '%, 222, %';
  

regexp_split_to_array и массив содержит оператор @>

 SELECT regexp_split_to_array('{"words": "111, 222"}'::json->>'words', ', ') @> ARRAY['222'];
  

или EXISTS и regexp_split_to_table()

 SELECT EXISTS (SELECT *
                      FROM regexp_split_to_table('{"words": "111, 222"}'::json->>'words', ', ') stt (c)
                      WHERE stt.c = '222');
  

db<>скрипта