从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,如您在此示例中所示:

http://www.jsfiddle.net/rLprV/1/