我有一个包含此内容的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对象?
答案 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
。)