Разбор JSON Postgres Параметр Функция - PullRequest
0 голосов
/ 20 марта 2020

У меня есть функция, которая получает JSON параметр, подобный этому funtion (p1 integer, p2 json)

Внешняя система (веб-приложение) вызывает мою функцию this способ

{\"field\" ...} 

и эта ошибка возвращается

ERROR: invalid input syntax for type json Detail: Token "\" is invalid.

Как я могу правильно прочитать это json?

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Исправить веб-приложение. Если это неправильно, кто знает, сколько еще способов исказить JSON?

Если вы хотите сыграть в «мальформирующий удар», вы можете использовать REPLACE или TRANSLATE, чтобы удалить обратная косая черта и затем приведение к json. Вы можете изменить сигнатуру функции, чтобы взять текст, затем выполнить удаление и привести внутри самой функции. Или вы можете сделать удаление внутри вызова функции.

select function(p1,translate(p2,'\','')::json) from ...
0 голосов
/ 20 марта 2020

Ошибка самоочевидна. {} не является действительным json. "{}" является. Любое допустимое должно быть строкой. В javascript:

s = {}
d = "{}"

JSON.parse(s) выдаст:

Uncaught SyntaxError: Неожиданный токен o в JSON в позиции 1 в JSON .parse () в: 1: 6

Пока JSON.parse(d) пройдет. Если вы используете javascript, попробуйте использовать JSON.stringify() перед передачей значений в postgresql. (Или эквивалент на любом языке, который вы используете)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...