读取已解析的 JSON 响应

Reading a parsed JSON response

本文关键字:JSON 响应 读取      更新时间:2023-09-26

如何使用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);
}

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

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

相反。

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

{"code":200}

您正在对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)
{//...
}