我已经使用带有引号的对象序列化JSON,如下所示:
var bla = [
{
"label": "person",
"id": "1",
"data": "bla means: \"lala\""
}
];
我知道它在服务器端的外观。但是当我在浏览器中调试它时,我发现我收到了错误,因为它看起来如下:
var bla = [
{
"label": "person",
"id": "1",
"data": "bla means: "lala""
}
];
和我的错误:
Uncaught SyntaxError:位于25位置的JSON中的意外标记l JSON.parse()
我读到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("\\\"", "\\\\\\\"");
答案 0 :(得分:3)
您可以尝试使用双反斜杠或三反斜杠,例如\\" or \\\"
var bla = [
{
"label": "person",
"id": "1",
"data": "bla means: \\"lala\\""
}
];
它会添加反斜杠并用双引号打印。
答案 1 :(得分:1)
服务器应该提供可以直接解析的正确的序列化JSON,而客户端不必首先对数据进行棘手的字符串操作。 (例如,如果您没有在服务器端修复它,那么它对resource.description_backend.write(:en, "Foo")
resource.description_backend.write(:de, "bar")
resource.description_backend.write(:fr, "dummy")
...
Mobility.locale = :ja
resource.description(fallback: [:nl, :de])
无效)
答案 2 :(得分:1)
就我而言,我只使用String.raw()。
JSON.parse(`{ "key": "\""}`) // fail
JSON.parse(String.raw`{ "key": "\""}`) // work
答案 3 :(得分:0)
我没有完全理解你的项目结构,但是:
反斜杠 \
是javascript中的特殊字符。
它很特殊,因为它具有正则表达式的特殊含义。
\hello
时,您的输出将为hello
\'hello
时,您的输出将为'hello
。\"hello\"
时,您的输出将为"hello"
我认为您应首先选择您希望如何格式化data
属性。
您希望数据是字符串吗?阵列?宾语?一个字符串,它将所有引号保持为double或single?
看看这里 - https://www.w3schools.com/js/js_strings.asp
并确定您要使用的字符串格式。
如果你想转义一个字符(实际上意味着将它放在你的字符串中),你应该在这个字符之前添加\
。