繁体   English   中英

JSON.parse无法识别要解析的字符串中的\\“(反斜杠和引号)

[英]JSON.parse can't recognize \" (backslash and quote) in string to parse

我已经将对象的JSON序列化为字符串,如下所示:

var bla = [
    { 
        "label": "person", 
        "id": "1", 
        "data": "bla means: \"lala\"" 
    }
];

我知道它在服务器端的外观。 但是,当我在浏览器中对其进行调试时,我看到在此上我收到错误,因为它看起来如下:

var bla = [
    { 
        "label": "person", 
        "id": "1", 
        "data": "bla means: "lala"" 
    }
];

和我的错误:

Uncaught SyntaxError:JSON中意外的令牌l在JSON.parse()的位置25

我读到JSON应该可以识别\\“ https://www.json.org/

有什么想法我应该在哪里纠正? 在服务器端我序列化对象时还是在客户端使用JavaScript?

编辑:

在服务器端,我使用C#库"System.Web.Script.Serialization"进行序列化的对象:

List<SomeObject> someObject= new List<SomeObject>();
        SomeObject bla1 = new SomeObject();
        bla1.id = "1";
        bla1.label = "person";
        bla1.label = "bla means: \"lala\"";
        someObject.Add(bla1);

var bla = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(someObject);

摘要

我在服务器端修复了序列化的字符串,因为我使用的API无法处理此对象。 var bla = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(someObject).Replace("\\\\\\"", "\\\\\\\\\\\\\\"");

您可以尝试使用双反斜杠或三反斜杠,例如\\\\" or \\\\\\"

var bla = [
    { 
        "label": "person", 
        "id": "1", 
        "data": "bla means: \\"lala\\"" 
    }
];

它将添加反斜杠并用双引号打印。

服务器应提供可直接解析的正确的序列化JSON,而客户端不必首先对数据进行棘手的字符串操作。 (例如,如果您不在服务器端对其进行修复,则fetch(...).then(res => res.json())变得无效fetch(...).then(res => res.json())

我不完全了解您的项目的结构,但是:

反斜杠 \\是javascript中的特殊字符。

之所以特殊是因为它具有正则表达式的特殊含义。

  1. 编写\\hello ,您的输出将是hello
  2. 编写\\'hello ,您的输出将是'hello
  3. 编写\\"hello\\" ,输出为"hello"

我认为您应该首先选择要如何精确格式化data属性。

您要数据为字符串吗? 数组? 宾语? 保留所有引号为双引号或单引号的字符串?

在这里看看-https: //www.w3schools.com/js/js_strings.asp

并确定您要使用的字符串格式。

如果要转义字符 (实际上意味着将其包含在字符串中),则应在此字符前添加\\

就我而言,我只使用String.raw()

JSON.parse(`{ "key": "\""}`) // fail
JSON.parse(String.raw`{ "key": "\""}`) // work

暂无
暂无

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

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