从jquery访问json数据

时间:2010-12-12 22:39:31

标签: javascript ajax json jquery

我正在使用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] 但它总是返回“未定义”。我做错了什么?

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;
}

我一直在谷歌搜索这几天。我如何访问返回的数据?任何帮助将不胜感激。

8 个答案:

答案 0 :(得分:9)

要访问您需要的状态值:

data[4].status

这是因为它是一个存储在数组中第五个元素中的对象,status是对象的属性。

答案 1 :(得分:8)

您的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
}

答案 2 :(得分:6)

在你的成功回调试试:

var parsed = $.parseJSON(data);
$.each(parsed, function (i, jsondata) {
    alert( jsondata.k );
    alert( jsondata.v );
});

答案 3 :(得分:4)

您不需要eval("("+data+")");。由于您指定了dataType:'json'

,jQuery会自动为您解析JSON响应

来自dataType的jQuery文档:

  

“json”:将响应评估为JSON并返回JavaScript对象。在jQuery 1.4中,JSON数据以严格的方式解析;任何格式错误的JSON都会被拒绝,并抛出一个解析错误。 (有关正确的JSON格式的更多信息,请参阅json.org。)

答案 4 :(得分:3)

不需要在代码下面再使用eval,这对于json来说可能更多

$.getJSON(url+query,function(json){
            $.each(json,function(i,value){

            });
        });

答案 5 :(得分:1)

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,而不是先查看你在响应中找到它的位置(可能容易出错)。

答案 6 :(得分:0)

数据参数是解码的JSON,如本例所示:

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

答案 7 :(得分:0)

$.ajax({
        url: url,
        type: 'POST',
        dataType: 'json',
        data: formData,
        showLoader:true,
        success: function (response) {
            var parsed =  JSON.parse(JSON.stringify(response));
            $.each(parsed, function (key, val) {
                alert( val.name );                      
            });
        },
        error: function (err) {
            alert("Please enter a valid id")    
        }
     });