当前位置: 首页 > 知识库问答 >
问题:

JSON响应中的非法字符

冯鸿光
2023-03-14

我有一个Sencha Touch应用程序。我的一个商店使用ajax代理和json阅读器。从我的sinatra应用程序返回的JSON中的一些字符串偶尔包含以下字符:http://www.fileformat.info/info/unicode/char/2028/index.htm

虽然它是不可见的,但该字符在这里的第二个字符串中出现了两次,在句点和结尾引号之间:

"description": "Each of the levels requires logic, skill, and brute force to crush the enemy.

"

尝试复制和粘贴“每个级别都需要逻辑,技能和蛮力来粉碎敌人。

”进入您的javascript控制台!它不会被解析为字符串,并因< code>SyntaxError:意外标记非法而失败。

这会导致JSON响应失败。我在这上面卡了很久了!有什么建议吗?

共有3个答案

轩辕鸿祯
2023-03-14

避免使用eval解析JSON。

使用JSON.parse或https://github.com/douglascrockford/JSON-js.

JSON.parse('{}');  // where {} is your JSON String
蒙墨竹
2023-03-14

从概念上讲,只允许通过适当转义从服务器发送有效JavaScript文本的字符串。

如果您想在客户端上解决此问题,您需要一个额外的解决方法步骤(似乎仅适用于Firefox):

var a = escape("Each of the levels requires logic, skill, and brute force to crush the enemy.");
alert(unescape(a));

但是讨论已经过时了,因为您必须在服务器上进行转义。

瞿博易
2023-03-14

解决此问题的唯一可靠方法是服务器端。确保JSON生成器发出转义的字符,例如\u2028

根据我的经验,最简单的方法就是用普通的ASCII编码你的JSON,这种方法总是有效的。缺点是效率较低,因为非ASCII字符会占用更多的空间,所以根据这些字符的频率,您可能不想要这种折衷...

Perl的JSON::XS文档很好地解释了这个问题,并建议如何在Perl中修复它:http://search.cpan.org/perldoc?JSON::XS#JSON_and_ECMAscript

 类似资料:
  • 嗨,有人能给我删除\r\n空格和向后斜杠()的代码片段吗? "有效负载": "{**\r\n**"postId": 1,\r\n"id": 1,\r\n"name":"id labore ex et quam lab um",\r\n"email":"Eliseo@gardner.biz",\r\n"body":"laudantium enim quasi est quidem magnam vo

  • 此问题似乎与在帮助中心定义的范围内编程无关。 您好,任何人都可以给我删除空格和反斜杠()的代码段。 “Payload”:“{**\r\n**”postId:1,\r\n“id”:1,\r\n“name”:“id labore ex et quam labourum”,\r\n“email”:Eliseo@gardner.biz“,\r\n“body”:“laudantium enim quasi

  • 我试图在Angular中发出请求,我知道HTTP响应不是在JSON中,而是在文本中。但是,Angular似乎期待一个JSON响应,因为错误如下: SyntaxError:JSON中XMLHttpRequest.c的JSON.parse()位置0处的意外标记< 我认为足以使Angular expect得到非JSON响应。

  • 问题内容: 我正在尝试从基于Django的Web后端在Android中获得jSON响应。我得到的回应是 Android请求 Django Views代码 我不太确定,为什么我没有得到预期的jSON响应。手动点击网址后,我得到了预期的JSON响应 编辑1 我也尝试过这种方法 编辑2 我收到的错误是 HTTP 403请求 ,尝试发送发送的请求,因为该值未达到API调用 编辑3 我得到的HTTP响应为2

  • 我不知道这里有什么问题。我想发出一个响应二进制数据(例如文件下载)而不是JSON的HTTP请求。 这些行是可以的-但需要JSON。 但我需要将响应定义为不是 JSON。 在这里,我遇到了一个问题。我也尝试了“斑点”。我总是在编译时收到一个类型脚本错误。 类型'{resseType:"string";}'的参数不能分配给类型'{Headers?: HttpHeaders|{[head: string

  • 我试图模拟RestTemplate响应中的字符串,但代码中的错误如下。请提供投入。 上述错误发生在这一行: