2015-07-30 1 views
1

Предположим, у меня есть значение типа json, скажем y. Такое значение можно получить, например, obj->'key' или любую функцию, которая возвращает значения типа json.В PostgreSQL, как я могу развернуть строку json для текста?

Это значение, когда приведение к text, включает в себя кавычки т.е."y" вместо y. В тех случаях, когда использование типов json неизбежно, это создает проблему, особенно если мы хотим сравнить значение с литеральными строками , например.

select foo(x)='bar'; 

API Brainstorm страница предлагает from_json функцию, которая будет разумно развернет JSON строки, но я сомневаюсь, что существует. В то же время, как можно преобразовать строки JSON в текст без кавычек?

ответ

4

Оператор ->> корректно разворачивает кавычки. Чтобы воспользоваться этим оператором, мы завершаем наше значение внутри массива, а затем преобразуем его в json.

CREATE OR REPLACE FUNCTION json2text(IN from_json JSON) 
RETURNS TEXT AS $$ 
BEGIN 
    RETURN to_json(ARRAY[from_json])->>0; 
END; $$ 
LANGUAGE plpgsql; 

Для полноты мы обеспечиваем CAST, что делает использование указанной выше функции.

CREATE CAST (json AS text) WITH json2text(json) AS ASSIGNMENT; 
+2

Ugh. Должен быть лучший способ. Хотя я помню, что это было настоящее раздражение с 9.3 json API. –

+0

@CraigRinger Надеюсь, тот, кто знает лучшее решение, видит это! –

Смежные вопросы