当字符串包含src =“”或id =“”属性时,不能$ .parseJSON()

时间:2014-09-09 10:12:31

标签: javascript jquery json

执行此操作时我可以使用$ .parseJSON():

var myString = '{ "Header": "<p>some content</p>"}';
var modelJsonObject = $.parseJSON(myString);

但不是"Header"值保持src=""id=""等。如下所示:

var myString = '{ "Header": "<p><img src=\"http://placehold.it/50x50\" style=\"line-height: 1.3; width: 50px;\"><br></p>"}';

然后我在控制台中得到一个SyntaxError:Unexpected token

怎么办?

1 个答案:

答案 0 :(得分:2)

由于JSON字符串以引号(")开头和结尾,所以字符串中的任何此类引号必须被转义,如下所示:\"因此,一个JSON字符串仅由引用组成"\""

然后是JavaScript的语法。在JS中写为'\"'的字符串会生成字符串"。 (尝试console.log('\"')。)由于反斜杠在JS中具有特殊含义,因此必须对它们进行转义。

以上的总和是一个JSON字符串,只包含一个用JS编写的引用:

'"\\""'

最后,你的字符串必须这样写:

var myString = '{ "Header": "<p><img src=\\"http://placehold.it/50x50\\" style=\\"line-height: 1.3; width: 50px;\\"><br></p>"}';
//             1            2              3
  1. JavaScript 字符串的开头。
  2. JSON 字符串的开头, JS字符串中。
  3. 中的引号是否为JSON字符串。

  4. 请注意,在JS中使用单引号使我们不必转义 JS 的双引号,但JSON语法仍然必须正确。如果我们对字符串使用双引号,那么我们最终会看到这个看起来很滑稽的东西:

    "{ \"Header\": \"<p><img src=\\\"http://placehold.it/50x50\\\" style=\\\"line-height: 1.3; width: 50px;\\\"><br></p>\"}";
    

    其中\\\"是JS转义反斜杠(\\),后跟JS转义引号(\"),导致引用JSON转义。