Perl JSON 英镑符号转义
我正在尝试使用用 Perl (OTRS) 编写的服务的 Web API。 数据以 JSON 格式发送。
JSON 结构内的字符串值之一包含井号,该符号显然用作 JSON 中的注释字符。 这会导致解析错误:
解析时出现意外的字符串结尾 JSON 字符串
我找不到如何转义字符以便成功解析字符串。 明显的斜杠转义结果是:
非法反斜杠转义序列 字符串
有什么想法如何转义它吗?
更新: 我尝试使用的 URL 看起来像这样(简化但仍然会导致错误):
http://otrs.server.url/otrs/json.pl?User=username&Password=password&Object=TicketObject&Method=ArticleSend&Data={"Subject":"[Ticket#100000] Test Ticket from OTRS"}
I am trying to use a web API of a service written in Perl (OTRS).
The data is sent in JSON format.
One of the string values inside the JSON structure contains a pound sign, which in apparently is used as a comment character in JSON.
This results in a parsing error:
unexpected end of string while parsing
JSON string
I couldn't find how to escape the character in order to get the string parsed successfully.
The obvious slash escaping results in:
illegal backslash escape sequence in
string
Any ideas how to escape it?
Update:
The URL I am trying to use looks something like that (simplified but still causes the error):
http://otrs.server.url/otrs/json.pl?User=username&Password=password&Object=TicketObject&Method=ArticleSend&Data={"Subject":"[Ticket#100000] Test Ticket from OTRS"}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
Uri::escape
:参见 rfc1738 可能不安全的字符列表。
Use
Uri::escape
:See rfc1738 for the list of characters which can be unsafe.
哈希符号
#
具有 URL 中的特殊含义,而不是 JSON 中的特殊含义。您的 URL 可能在删除服务器看到它之前就在哈希处被截断:这意味着远程服务器在
Data
中得到了损坏的 JSON。解决方案是对参数进行 URL 编码,然后将它们粘贴在一起形成 URL;尤金 y 告诉您如何做到这一点。The hash symbol,
#
, has a special meaning in URLs, not in JSON. Your URL is probably getting truncated at the hash before the remove server even sees it:And that means that the remote server gets mangled JSON in
Data
. The solution is to URL encode your parameters before pasting them together to form your URL; eugene y tells you how to do this.