我有这种格式的数据:
var data = "{"attr":"value","html":"<div><div style="left: 0px;"></div></div>"}";
html还有更多,但这里不需要。我试着这样做:
data = JSON.parse(data)
这个错误给出了:
未捕获的SyntaxError:意外的标记l
由于还有“风格。你如何正确解析这个?
编辑:
我从服务器获取数据,所以我在websocket中收到它,例如:
sock.onmessage = function(message) {
//Need to parse this.
data = message.data
console.log(typeof data); // = string
console.log(data);
//console.log(data) result
//{"attr":"value","html":"<div><div style="left: 0px; width: 100%; height: 0px; position: relative; padding-bottom: 56.2493%;">Content</div></div>"}
}
答案 0 :(得分:1)
这里有两个非常相似的问题。第一个是您简化问题中示例的方式。
var data = "{"attr":"value","html":"<div><div style="left: 0px;"></div></div>"}";
这不是有效的JavaScript。最简单的解决方法是在整个事情中使用单引号。您还可以使用反斜杠\
来转义引号。试试这个:
var data = '{"attr":"value","html":"<div><div style="left: 0px;"></div></div>"}';
现在你遇到的第二个问题是这个JSON完全无效且含糊不清。原因是引号未在html
部分正确转义。除非你知道这种格式永远不会改变,否则你无能为力。在这种情况下,您可以编写自己的hackjob伪JSON解析器。 不要这样做。
您需要与向您提供垃圾数据的人员进行交谈。您的代码如何知道html
变量值是否完整,或者它只是HTML中的引用?设置此JSON数据的任何人都需要修复它。
答案 1 :(得分:0)
使用&#39;而不是&#34;像这样:
str = '<div><div style="left: 0px;"></div></div>'
var data = "{'attr':'value','html': "+JSON.stringify(str)+"}";
更新
答案 2 :(得分:0)
继续使用双引号,应该是
x = rows.map(function(d) {
return {
"month": parseDate(d.dt)
};
});
latestMth = d3.max(x.map(d=>d.month));
console.log(latestMth);//returns Fri Jul 01 2016
更合适的是,作为一个字符串:
var data = "{
\"attr\":\"value\",
\"html\":\"<div><div style='left: 0px;'></div></div>\"
}";
...干净的var data = "{\"attr\":\"value\",\"html\":\"<div><div style='left: 0px;'></div></div>\"}";
问题在于字符串,而不是解析过程。我总是更喜欢JSON.parse(data);
格式,然后是内部的单引号,例如样式。它一直很适合我。