将HTML转换为JSON时出现问题

时间:2010-12-29 19:11:43

标签: jquery html json

我有一个包含此内容的div:

<div id="hidLocsJsonForAutoComplete" style="display:none;">[{"id":1,"desc":"Amazon","name":"amazon"},{"id":2,"desc":"Apple Bees","name":"applebees"},{"id":3,"desc":"Babys r Us","name":"babysrus"},{"id":4,"desc":"Costco","name":"costco"},{"id":5,"desc":"Concord Produce","name":"concordproduce"},{"id":6,"desc":"Grocery Outlet","name":"groceryoutlet"},{"id":7,"desc":"New India Bazar","name":"newindiabazar"},{"id":8,"desc":"SubWay","name":"subway"},{"id":9,"desc":"Walmart","name":"walmart"}]</div>

然后在脚本部分我有这个

var jsonLocs = $('#hidLocsJsonForAutoComplete').html();

现在,jsonLocs [0]正在返回

[

而不是

{"id":1,"desc":"Amazon","name":"amazon"}

我理解jsonLocs被认为是字符串。但是如何在这个数组中获得第一个Json对象?

4 个答案:

答案 0 :(得分:3)

jsonLocs包含一个String对象,您需要将内部HTML解析为json。 试试这个:

var jsonLocs = $.parseJSON($('#hidLocsJsonForAutoComplete').html()); 

答案 1 :(得分:1)

如果您使用的是jQuery 1.4.1或更高版本,则可以使用jQuery的内置.parseJSON()函数:

var jsonLocs = $.parseJSON($('#hidLocsJsonForAutoComplete').html());

在旧版本中,你可以使用eval(并通过做错而暴露自己潜在的安全/等问题,但是......):

var jsonLocs = eval('('+$('#hidLocsJsonForAutoComplete').html()+')');

答案 2 :(得分:1)

没关系,得到答案!! :)

var jsonLocs = eval($('#hidLocsJsonForAutoComplete').html());

魔术了​​吗?但是想知道这是否是最有效/推荐的方法。

答案 3 :(得分:0)

变量jsonLocs只是一个字符串,这就是为什么当你索引第一个元素时,你得到字符串的第一个字符。你需要做的是parse将HTML的值放入Javascript对象中,然后取第一个元素。

所以,你需要做这样的事情:

var jsonLocs = JSON.parse($('#hidLocsJsonForAutoComplete').html());

当然,对于不支持本机JSON解析的浏览器,您可以使用Douglas Crockford的wonderful library(如果您希望危险地生活,可以使用eval。)