如何用JavaScript/jQuery访问JSON嵌套数组?为何取值返回undefined?
问题分析与解决:嵌套JSON中age值返回undefined的原因
你的问题出在对assets的访问方式上:assets是一个数组(用[]定义),不是单个对象,直接通过.assets.age访问相当于在数组对象本身查找age属性,而数组没有这个属性,所以返回undefined。
修正方案(单元素assets场景)
如果每个工单的assets固定只有一个元素,直接通过数组索引[0]访问数组内的对象,再获取age:
var json = { "status": "OK", "tickets": { "open_tickets": [{ "id": "2", "assets": [{ "id": 2446, "age": 4 }] }, { "id": "3", "assets": [{ "id": 244564646, "age": 28 }] }] } }; for(i=0;i<json.tickets.open_tickets.length;i++){ var ticket = json.tickets.open_tickets[i]; var id = ticket.id; // 通过数组索引获取assets中的第一个对象,再取age var age = ticket.assets[0].age; $('.holder').append('<p>'+id+' '+age+'</p>'); }
扩展方案(多元素assets场景)
如果assets可能包含多个元素,需要嵌套循环遍历所有资产:
var json = { "status": "OK", "tickets": { "open_tickets": [{ "id": "2", "assets": [{ "id": 2446, "age": 4 }, { "id": 2447, "age": 6 }] }, { "id": "3", "assets": [{ "id": 244564646, "age": 28 }] }] } }; for(i=0;i<json.tickets.open_tickets.length;i++){ var ticket = json.tickets.open_tickets[i]; var id = ticket.id; // 遍历当前工单下的所有资产 for(j=0;j<ticket.assets.length;j++){ var age = ticket.assets[j].age; $('.holder').append('<p>'+id+' '+age+'</p>'); } }
关键注意点
访问嵌套JSON结构时,务必先确认每一层的数据类型:
- 对象(
{}包裹)用点语法object.key访问属性 - 数组(
[]包裹)用索引array[index]访问元素,再对元素(通常是对象)使用点语法
内容的提问来源于stack exchange,提问作者drago
相关产品推荐
相关产品推荐

