简体   繁体   English

JSON Javascript转义

[英]JSON Javascript escape

So i have some of my example dynamic JSON below, what i'm having trouble doing is escaping everything properly so that it is properly processed by JSON.parse or Jquery.parseJSON, which for some reason it currently isnt. 所以我在下面有一些示例动态JSON,我遇到的麻烦是正确地转义了所有内容,以便可以通过JSON.parse或Jquery.parseJSON进行正确处理,由于某种原因,当前它不是。 I've tried replacing all quotes but it doesn't solve anything... 我尝试替换所有引号,但不能解决任何问题...

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"}';

Inside JSON, quotes within strings need to be escaped with a backslash: {"key": "prop with \\" quote"} . 在JSON内部,字符串中的引号需要使用反斜杠进行转义: {"key": "prop with \\" quote"}

Inside JavaScript, quotes and backslashes within string literals need to be escaped with a backslash: "string with \\\\backslash and \\" quote" . 在JavaScript内部,字符串文字中的引号和反斜杠需要使用反斜杠进行转义: "string with \\\\backslash and \\" quote"

If you really would need to use JSON in JS string literals (there is no reason to do that), you would need to double-escape them: json = "{\\"key":\\"prop with \\\\\\" quote and \\\\n linebreak\\"}" . You haven't done so for the quotes around "Windows Phone". 如果确实需要在JS字符串文字中使用JSON(没有理由这样做),则需要对它们进行两次转义: json = "{\\"key":\\"prop with \\\\\\" quote and \\\\n linebreak\\"}" 。对于“ Windows Phone”周围的引号,您尚未这样做。

However, you must've done something wrong when dealing with such problems. 但是,在处理此类问题时,您一定做错了。 Usually you get JSON strings from ajax calls and such, where you get them already as a string value. 通常,您可以从ajax调用等获取JSON字符串,而在这些字符串中,它们已经作为字符串值获取了。 If you want to echo some sever-created JSON directly into a js script, you don't need to wrap it in a string literal - it is already [nearly] valid Object Literal syntax. 如果您想将一些由服务器创建的JSON直接回显到js脚本中,则无需将其包装在字符串文字中-它已经[几乎]有效的Object Literal语法。

Your problem is probably that your whole Json object is just one string, because of the quotes on the start and end. 您的问题可能是整个Json对象只是一个字符串,因为开头和结尾都有引号。 The idea of JSON is assigning complex variables to one object, like this: JSON的想法是将复杂变量分配给一个对象,如下所示:

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

Also, there is no need to escape forward slashes. 同样,也无需逃脱正斜杠。

All the way at the end: 一直到最后:

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

Escape the backslashes: 转义反斜杠:

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

According to JSONLint , your problem is on this line: 根据JSONLint ,您的问题在这条线上:

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

If you remove the backslashes on ', it validates. 如果您删除'上的反斜杠,它将生效。 In JSON , you don't escape ' JSON中 ,您不会转义'

Unfortunately, since you are using ' to delimit your string, you'll need to find another way to escape it. 不幸的是,由于您使用'来分隔字符串,因此您需要找到另一种转义字符串的方法。 You could use \' in place of \\'. 您可以使用\\ u0027代替\\'。

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

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