Perl JSON знак фунта - PullRequest
       13

Perl JSON знак фунта

2 голосов
/ 07 апреля 2011

Я пытаюсь использовать веб-API службы, написанной на Perl (OTRS).Данные отправляются в формате JSON.

Одно из строковых значений внутри структуры JSON содержит знак решетки, который, очевидно, используется как символ комментария в JSON.Это приводит к ошибке синтаксического анализа:

неожиданный конец строки при синтаксическом анализе строки JSON

Я не смог найти способ экранирования символа, чтобы проанализировать строкууспешно.Очевидное экранирование косой черты приводит к:

недопустимая escape-последовательность обратной косой черты в строке

Есть идеи, как ее избежать?

Обновление: URL, который я пытаюсь использовать, выглядит примерно так (упрощенно, но все равно вызывает ошибку):

http://otrs.server.url/otrs/json.pl?User=username&Password=password&Object=TicketObject&Method=ArticleSend&Data={"Subject":"[Ticket#100000] Test Ticket from OTRS"}

Ответы [ 2 ]

7 голосов
/ 07 апреля 2011

Использование Uri::escape:

use URI::Escape;
my $safe = uri_escape($url);

См. rfc1738 для списка символов, которые могут быть небезопасными.

5 голосов
/ 07 апреля 2011

Символ хеша # имеет специальное значение в URL-адресах , а не в JSON.Ваш URL, вероятно, усекается в хэше до того, как сервер удаления его видит:

http://otrs.server.url/otrs/json.pl?User=username&Password=password&Object=TicketObject&Method=ArticleSend&Data={"Subject":"[Ticket

И это означает, что удаленный сервер получает искаженный JSON в Data.Решение состоит в том, чтобы URL закодировать ваши параметры, прежде чем вставлять их вместе, чтобы сформировать ваш URL;Евгений у рассказывает, как это сделать.

...