如何正确遍历由C#对象序列化得到的二维JSON数据?
正确遍历嵌套二维JSON数组的方法
嘿,我来帮你搞定这个遍历问题~首先先明确你的数据结构:这是一个外层数组嵌套内层数组的结构,每个内层数组里是包含ID、Name、Ct、Time属性的对象,是从C#序列化过来的标准JSON数组。
你原来用for...in的方式其实能跑,但并不适合遍历数组——因为for...in是用来遍历对象的可枚举属性的,虽然数组也是对象,但它会把数组原型链上的额外属性(比如如果有人给Array.prototype加了自定义方法)也遍历出来,而且遍历顺序也不能保证和数组元素顺序一致,所以更推荐用专门针对数组的遍历方式:
1. 最传统的普通for循环(兼容性最好)
这种方式通过索引遍历,适合需要控制遍历过程(比如中断、跳过)的场景:
// 假设data已经是解析后的JavaScript数组(比如用JSON.parse处理过) for (let i = 0; i < data.length; i++) { const innerArray = data[i]; // 遍历内层数组 for (let j = 0; j < innerArray.length; j++) { const currentItem = innerArray[j]; // 访问对象属性,做你需要的操作 console.log(`ID: ${currentItem.ID}, 时间: ${currentItem.Time}`); } }
2. 更简洁的forEach方法(ES5+支持)
如果不需要中断遍历,forEach写法更清爽,可读性更高:
data.forEach(innerArr => { innerArr.forEach(item => { // 处理每个对象 console.log(`名称: ${item.Name}, 计数: ${item.Ct}`); }); });
3. ES6+的for...of循环(最直观)
for...of专门用来遍历可迭代对象(包括数组),直接拿到数组元素,不用管索引:
for (const innerArr of data) { for (const item of innerArr) { // 操作当前对象 console.log(`ID: ${item.ID}, 时间: ${item.Time}`); } }
为什么不推荐用for...in?
举个例子,如果有人给数组原型加了一个自定义方法:
Array.prototype.myCustomMethod = function() {};
那你用for (var key in data)的时候,key会包含"myCustomMethod",导致你遍历到非数组元素的内容,出现错误。而上面三种方法只会遍历数组本身的元素,更安全可靠。
只要你的JSON已经被正确解析成JavaScript数组(比如通过JSON.parse()),以上三种方式都能完美遍历你的数据~
内容的提问来源于stack exchange,提问作者The Moon




