将从元素的数据属性获得的字符串转换为json

时间:2016-03-14 19:12:19

标签: javascript jquery html json

我收到以下代码的错误。我知道$.parseJSON()对单/双引号很敏感。我想不出这个问题的解决方案。你能帮忙吗?

<div data-x='{"a":"1","b":"2"}'></div>

$(document).ready(function(){
    var data =$.parseJSON($("div").data("x"))
    alert(data.a)
})

https://jsfiddle.net/r2Lnfbpm/

1 个答案:

答案 0 :(得分:3)

jQuery&#39; s data()进行类型转换,因此当数据属性是有效的JSON时,它已经被解析为一个对象,并且将一个对象传递给$.parseJSON会产生错误,因为它需要一串JSON。

$(document).ready(function(){
    var data = $("div").data("x");
    console.log(data.a);
});

来自documentation

  

每次尝试将字符串转换为JavaScript值   (包括布尔值,数字,对象,数组和null)   如果这样做不会更改值,则只会将值转换为数字   表示。

     

例如,&#34; 1E02&#34;和&#34; 100.000&#34;相当于   数字(数值100)但转换它们会改变它们   表示所以它们被保留为字符串。字符串值&#34; 100&#34;是   转换为数字100。

     

当数据属性是对象时 (以&#39; {&#39;开头)或数组   (以&#39; [&#39;开头] 开头,然后jQuery.parseJSON用于解析字符串;   它必须遵循有效的JSON语法,包括引用的属性名称。如果   该值不能作为JavaScript值进行解析,而是保留为   字符串。

     

要将值的属性检索为字符串而不进行任何尝试   转换它,使用attr()方法。