以下是我尝试调用JSON.parse的较大JSON字符串的一部分。我得到了臭名昭着的无效角色'错误,因为(我相信)反斜杠括号(即。"路径:\" https://mysite.sharepoint.com/sites/Test \")。
我尝试过的所有在线解析器工作正常但在我的javascript代码中JSON.parse方法失败。
我试图像这样和其他方式清理字符串,但我无法解析它。
var cleanData = data.replace(/\\"/, /\\\\/);
下面的是部分JSON文件。当我从JSON字符串中删除它时,JSON.parse正常工作,所以我认为我已将此与此隔离。什么类型的通用清洁方法可以解决这个问题? Thansk
'{"Properties" : {
"GenerationId" : 9223372036854776000,
"indexSystem" : "",
"ExecutionTimeMs" : 109,
"QueryModification" : "path:\"https://mysite.sharepoint.com/sites/Test\" (IsDocument:\"True\" OR contentclass:\"STS_ListItem\") ContentTypeId:0x0120D5200098CBB075E51C8C4398ECCB4B4928912D*",
"RenderTemplateId" : "~sitecollection/_catalogs/masterpage/Display Templates/Search/Group_Default.js",
"StartRecord" : 0,
"piPageImpressionBlockType" : 2
}}
如何?
答案 0 :(得分:3)
问题是你的反斜杠被吞下作为字符串中的转义字符:
'\"' === '"' // true
实际上你需要转义反斜杠,以便JSON解析器看到它们。这是另一个例子:
var unencoded = 'string with "quotes"';
'"string with \"quotes\""' === JSON.stringify(unencoded); // false
'"string with \\"quotes\\""' === JSON.stringify(unencoded); // true
但是,应该在哪里进行转义取决于JSON如何可用于JavaScript。如果服务器端脚本在页面中嵌入了JSON,那么就不需要使用JSON.parse
,因为有效的JSON是有效的JavaScript:
// if JsonData is valid JSON, it's also a valid JavaScript object
var data = <%= JsonData %>;