如何在TypeScript中遍历嵌套JSON对象获取指定层级数据?
解决方案:获取多层级JSON数据
1. 嵌套forEach实现(直观易读)
你的JSON结构里,每个顶层Parent对应的是仅含一个对象的数组,要拿到Data1/Data2这类数据,用嵌套forEach可以直观逐层遍历:
// 假设parent是你的顶层JSON对象 Object.keys(parent).forEach(parentKey => { // 取每个Parent数组的第一个元素(你的结构里每个Parent数组只有一个元素) const parentItem = parent[parentKey][0]; // 遍历这个元素的所有键(即Data1、Data2) Object.keys(parentItem).forEach(dataKey => { const targetData = parentItem[dataKey]; console.log(`${dataKey}:`, targetData); // 这里可以处理拿到的Data数组,比如["Item1","Item2"] }); });
2. 更简洁的链式写法(TS数组方法优化)
如果追求更简洁的代码,可以用Object.values、flatMap、Object.entries组合,直接提取所有目标数据:
// 一次性获取所有DataX的键值对 const allTargetData = Object.values(parent) // 展开每个Parent的数组(因为每个Parent数组只有一个元素,flatMap直接取[0]) .flatMap(parentArr => parentArr) // 把每个对象转成键值对数组 .flatMap(item => Object.entries(item)); // 遍历处理结果 allTargetData.forEach(([dataKey, dataValue]) => { console.log(`${dataKey}:`, dataValue); });
这种写法避免了嵌套,更符合函数式编程风格,代码更紧凑。
3. TypeScript类型优化(避免any)
既然用TS,建议给JSON结构定义类型,减少any的使用,提升代码健壮性:
// 定义目标数据类型 type DataItem = { [key: string]: string[]; }; // 定义顶层JSON类型 type ParentObject = { [key: string]: DataItem[]; }; // 使用时指定类型 const parent: ParentObject = { "Parent1": [{"Data1": ["Item1","Item2"]}], "Parent2": [{"Data2": ["Item3","Item4"]}] }; // 之后的遍历代码会自动有类型提示
内容的提问来源于stack exchange,提问作者arj
相关产品推荐
相关产品推荐

