#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');