繁体   English   中英

JSON Javascript转义

[英]JSON Javascript escape

所以我在下面有一些示例动态JSON,我遇到的麻烦是正确地转义了所有内容,以便可以通过JSON.parse或Jquery.parseJSON进行正确处理,由于某种原因,当前它不是。 我尝试替换所有引号,但不能解决任何问题...

var Json = '{"resolved_id":"244296544","resolvedUrl":"http:\/\/www.engadget.com\/2012\/11\/01\/windows-phone-for-mac\/","host":"engadget.com","title":"Windows Phone 7 Connector for Mac updated for WP8, rebranded simply as \'Windows Phone\'","datePublished":"2012-11-01 04:49:00","timePublished":1351763340,"responseCode":"200","excerpt":"For Mac users who prefer Microsoft as their mobile partner, Windows Phone 7 Connector has been the one bridging the divide so far. The sync app has just been updated to v3.0, gaining support for Windows Phone 8 and a concise new name -- \"Windows Phone\" -- to match its Windows 8 counterpart.","authors":{"5437327":{"author_id":"5437327","name":"Deepak Dhingra","url":"http:\/\/www.engadget.com\/editor\/deepak-dhingra"}},"images":{"1":{"item_id":"244296544","image_id":"1","src":"http:\/\/www.blogcdn.com\/www.engadget.com\/media\/2012\/11\/win-phone-for-mac-1351752168.jpg","width":"0","height":"0","credit":"","caption":""}},"videos":"","wordCount":116,"isArticle":1,"isVideo":0,"isIndex":0,"usedFallback":0,"article":"\n<a href=\"http:\/\/www.engadget.com\/2012\/11\/01\/windows-phone-for-mac\/\" nodeIndex=\"493\"><img src=\"http:\/\/www.blogcdn.com\/www.engadget.com\/media\/2012\/11\/win-phone-for-mac-1351752168.jpg\" \/><span class=\"ril_caption\"> <cite><\/cite><\/span><\/a>\n<p nodeIndex=\"91\" scoreAddedToParent=\"37\">For Mac users who prefer Microsoft as their mobile partner, <a href=\"http:\/\/www.engadget.com\/2011\/08\/31\/windows-phone-7-mango-will-play-nicer-with-macs-update-your-con\/\" nodeIndex=\"495\">Windows Phone 7 Connector<\/a> has been the one bridging the divide so far. The sync app has just been updated to v3.0, gaining support for <a href=\"http:\/\/www.engadget.com\/2012\/10\/29\/windows-phone-8-review\/\" nodeIndex=\"496\">Windows Phone 8<\/a> and a concise new name -- \"Windows Phone\" -- to match its <a href=\"http:\/\/www.engadget.com\/2012\/10\/29\/microsft-adds-windows-phone-app-to-windows-store\/\" nodeIndex=\"497\">Windows 8 counterpart<\/a>. The new app plays well with <a href=\"http:\/\/www.engadget.com\/tag\/RetinaMacbookPro\/\" nodeIndex=\"498\">Retina Macs<\/a> too, while other goodies in the changelog include drag-and-drop capability for transferring files in either direction, along with support for iPhoto 9.3.2 and Aperture 3.3.2. Incoming WP8 devices such as the <a href=\"http:\/\/www.engadget.com\/2012\/10\/29\/htc-8x-review-windows-phone-8s-compact-flagship\/\" nodeIndex=\"499\">HTC 8X<\/a> and the <a href=\"http:\/\/www.engadget.com\/2012\/10\/04\/nokia-lumia-920-for-atandt-hands-on-a-windows-phone-8-flagship-wi\/\" nodeIndex=\"500\">Lumia 920<\/a> will also get enhanced ringtone features and allow battery life to be monitored via the app. Persuaded? Then collect your goods at the source link below.<\/p>\n\n"}';

在JSON内部,字符串中的引号需要使用反斜杠进行转义: {"key": "prop with \\" quote"}

在JavaScript内部,字符串文字中的引号和反斜杠需要使用反斜杠进行转义: "string with \\\\backslash and \\" quote"

如果确实需要在JS字符串文字中使用JSON(没有理由这样做),则需要对它们进行两次转义: json = "{\\"key":\\"prop with \\\\\\" quote and \\\\n linebreak\\"}" 。对于“ Windows Phone”周围的引号,您尚未这样做。

但是,在处理此类问题时,您一定做错了。 通常,您可以从ajax调用等获取JSON字符串,而在这些字符串中,它们已经作为字符串值获取了。 如果您想将一些由服务器创建的JSON直接回显到js脚本中,则无需将其包装在字符串文字中-它已经[几乎]有效的Object Literal语法。

您的问题可能是整个Json对象只是一个字符串,因为开头和结尾都有引号。 JSON的想法是将复杂变量分配给一个对象,如下所示:

var Json = {
  "resolved_id": "244296544",
  ...
}

同样,也无需逃脱正斜杠。

一直到最后:

'...\n\n"}';

转义反斜杠:

'...\\n\\n"}';

根据JSONLint ,您的问题在这条线上:

"title": "Windows Phone 7 Connector for Mac updated for WP8, rebranded simply as \'Windows Phone\'",

如果您删除'上的反斜杠,它将生效。 JSON中 ,您不会转义'

不幸的是,由于您使用'来分隔字符串,因此您需要找到另一种转义字符串的方法。 您可以使用\\ u0027代替\\'。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM