Postgres | V9.4 | Извлечь значение из json - PullRequest
0 голосов
/ 12 марта 2020

У меня есть таблица, в которой один из столбцов имеет тип TEXT и содержит объект json внутри. Я хочу найти ключ внутри json и спросить о его значении. Имя столбца json_representation и json выглядит так:

{
    "additionalInfo": {
        "dbSources": [{
            "user": "Mike"
        }]
    }
}

Я хочу получить значение «user» и спросить, равно ли оно «Mike». Я попытался сделать следующее:

select
json_representation->'additionalInfo'->'dbSources'->>'user' as singleUser 
from users 
where singleUser = 'Mike';

Я получаю сообщение об ошибке: Ошибка выполнения запроса

Причина: SQL Ошибка [42883]: ОШИБКА: оператор не существует: текст -> unknown Подсказка: ни один оператор не соответствует заданному имени и типу (аргументам) аргумента. Возможно, вам придется добавить явные приведения типов. Позиция: 31

пожалуйста, совет Спасибо

1 Ответ

1 голос
/ 12 марта 2020

В сообщении об ошибке указывается, что делать: вам может потребоваться добавить явный приведение типа :

И поскольку вы не можете ссылаться на псевдоним столбца в предложении WHERE, вам нужно чтобы обернуть его в производную таблицу:

select *
from (
   select json_representation::json ->'additionalInfo'->'dbSources' -> 0  ->>'user' as single_user 
   from users 
) as t
where t.single_user = 'Mike';

:: is Postgres ' оператор приведения

Но лучшим решением было бы изменить данные столбца введите json навсегда. И как только вы обновитесь до поддерживаемой версии Postgres, вы должны использовать jsonb.

...