如何使用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);
}
答案 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)
{//...
}