如何动态遍历jQuery $.getJSON返回的多层JSON数据
解决动态键JSON数据的遍历问题
你的问题核心在于动态键无法通过静态的点语法访问——原来的data.result.DYNAMIC_DATA会试图查找名为DYNAMIC_DATA的固定键,但实际返回的是DYNAMIC_DATA_1、DYNAMIC_DATA_2这类动态生成的唯一ID键。下面提供两种简单可靠的遍历方法:
方法1:使用Object.keys() + forEach遍历
Object.keys()可以直接提取对象的所有自身属性名(也就是那些动态ID键),再用forEach循环处理每个键对应的数据:
$(function(){ $.getJSON('/api/username?id='+DYNAMIC_USER_ID, function(data) { // 提取result对象下的所有动态键 const dynamicIds = Object.keys(data.result); // 遍历每个动态键,获取对应的用户信息 dynamicIds.forEach(id => { const userInfo = data.result[id]; console.log(`用户ID ${id} 的名字是:${userInfo.name}`); // 这里也可以获取age:userInfo.age }); }); });
方法2:使用for...in循环
如果需要兼容更旧的浏览器(比如IE9及以下),for...in是更稳妥的选择,记得加上hasOwnProperty判断避免遍历到原型链上的属性:
$(function(){ $.getJSON('/api/username?id='+DYNAMIC_USER_ID, function(data) { for (const id in data.result) { // 确保只遍历result自身的动态键,排除原型属性 if (data.result.hasOwnProperty(id)) { const userInfo = data.result[id]; console.log(userInfo.name); } } }); });
关键知识点
访问对象属性有两种方式:
- 点语法:
obj.staticKey—— 仅适用于已知固定名称的键 - 方括号语法:
obj[dynamicKey]—— 适用于键名是变量或动态生成的场景
你的场景正好对应第二种情况,所以必须用方括号语法来通过动态键获取对应的值。
内容的提问来源于stack exchange,提问作者Pixel Dsign
相关产品推荐
相关产品推荐

