JS - 使用html解析JSON

时间:2016-11-20 23:36:55

标签: javascript json

我有这种格式的数据:

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>"}
}

3 个答案:

答案 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);格式,然后是内部的单引号,例如样式。它一直很适合我。