读取已解析的JSON响应

时间:2013-11-24 16:40:28

标签: javascript jquery json

如何使用jQuery访问此JSON数组?我目前正在将数组从API处理到console.log(),并以此格式显示

Object {already_liked: false, media_id: "1234567890", likeResult: Object}
    already_liked: false
    likeResult: Object
        data: null
        meta: Object
            code: 200
            __proto__: Object
        __proto__: Object
    media_id: "1234567890"
    __proto__: Object

我从一个以这种方式格式化的AJAX请求中获得此响应

$.get('/likemedia', {
    mediaid: $(this).data("id")
}, function(data){
    console.log(data.html);
}, 'json');

来自/likemedia的回复以这种方式格式化

{"html":{"already_liked":false,"media_id":"1234567890","likeResult":{"meta":{"code":200},"data":null}}}

然后我尝试使用这种格式访问“meta ['code']”的JSON数组键

data.html.likeResult.meta.code

现在可以使用,我怎样才能获得'data.likeResult.meta.code'的值?

我试图执行以下操作,导致它将数组抛入console.log

if (data.html.likeResult.meta.code === "200") {
    alert("200 META CODE!");
} else {
    console.log(data.html);
}

2 个答案:

答案 0 :(得分:2)

您正在正确访问数据,但您正在对字符串进行严格的数字比较。这始终是false。严格比较意味着两个值的数据类型也必须匹配。因此,请与数字进行比较:

data.html.likeResult.meta.code === 200

代替。

您可以清楚地看到code是一个数字,因为该值不是双引号:

{"code":200}

答案 1 :(得分:1)

您正在对Number类型进行类型和值检查,并将其与字符串进行比较。这将始终评估为false。当你是类型时,类型和值检查是我鼓励的,并且大大改进了,但是当处理JSON时,我不会只假设一个类型。相反,我要写:

if (data.html.likeResult.meta.code == 200)

或者去:

if (+(data.html.likeResult.meta.code) === 200)//explicitly coercing to number

无论如何,我还要在访问许多嵌套属性之前检查对象:

if (data.hasOwnProperty('html'))
{
}

为了避免在访问不存在的属性时出错,这会终止整个脚本 也许这个功能可以帮助你:

function checkObject(obj, properties)
{
    var i, data = obj;
    for (i=0;i<properties.length;++i)
    {
        if (!data.hasOwnProperty(properties[i]))
        {
            return undefined;
            //or throw {'Property: ' + properties[i] + '  not found' , i}
        }
        data = data[properties[i]];
    }
    return data;
}

这为JSON对象IMO提供了一种更安全的方法。在您的情况下,您可以这样调用此函数:

var meta = checkObject(data, ['html','likeResult','meta','code']);
if (!meta)
{//one of the properties wasn't available, deal with that here
}
//all was well, so now:
if (meta.code == 200)
{//...
}