从jquery访问json数据
我正在使用jQuery 1.4.2创建一个ajax应用程序,我尝试使用get(),post()和ajax()方法本身。 我的php服务返回:
[{"k":"label0","v":0.5},{"k":"label1","v":99.43},{"k":"label2","v":2.46},{"k":"label3","v":46.29},{"status":"OK"}]
在我的成功回调中,我尝试访问json.status和json [0] [0],但它总是返回“undefined”。 我究竟做错了什么?
function getSysinfo(source) { var json = null; $.ajax({ url: source, type: 'POST', dataType: 'json', success: function (data) { json = eval("(" + data + ")"); $('#data').html(json.status); alert(json[0][0]); refreshChart(json); }, error: function (request, status, error) { alert("REQUEST:\t" + request + "\nSTATUS:\t" + status + "\nERROR:\t" + error); } }); return json; }
我一直在谷歌搜索这几天。 我如何访问返回的数据? 任何帮助,将不胜感激。
要访问该状态值,您需要:
data[4].status
这是因为它是存储在数组中第五个元素中的对象,其status
是对象上的属性。
您的JSON数据如下所示:
[ { "k": "label0", "v": 0.5 }, { "k": "label1", "v": 99.43 }, { "k": "label2", "v": 2.46 }, { "k": "label3", "v": 46.29 }, { "status": "OK" } ]
你必须阅读你的状态
json[4].status
将4
作为一个神奇的数字或length-1
– 不可取。 我会考虑修改你的服务器响应更有用的东西,如下所示:
{ "status": "OK", "entries": [ ... ] // add your data here }
在你成功的回调尝试:
var parsed = $.parseJSON(data); $.each(parsed, function (i, jsondata) { alert( jsondata.k ); alert( jsondata.v ); });
你不需要eval("("+data+")");
。 jQuery会自动为您解析JSON响应,因为您指定了dataType:'json'
来自dataType的jQuery文档:
“json”:将响应计算为JSON并返回JavaScript对象。 在jQuery 1.4中,JSON数据以严格的方式解析; 任何格式错误的JSON都会被拒绝,并抛出一个解析错误。 (有关正确的JSON格式的更多信息,请参阅json.org。)
不需要在代码下面再使用eval,这对json来说可能更多
$.getJSON(url+query,function(json){ $.each(json,function(i,value){ }); });
nategood已经写过你不需要对数据做任何事情,它已经是一个对象了。
在这种情况下,它是一个数组,如果你想访问状态,你需要从数据数组的最后一项(你可以在这个数组中找到它)中检索它:
data[data.length-1].status
但也许您应该考虑JSON的另一种结构,它看起来不太舒服。
像这样的东西:
{ "items":[ {"k":"label0","v":0.5}, {"k":"label1","v":99.43}, {"k":"label2","v":2.46}, {"k":"label3","v":46.29} ], "status":"OK" }
…应该更容易处理,因为你可以简单地访问data.status,而不是先查看你在响应中找到它的位置(可能容易出错)。
data参数是解码的JSON,如您在此示例中所示: