JavaScript如何动态获取JSON根级子键并忽略其父键?
解决动态获取JSON根级子键的问题
咱们先理清楚问题:你当前的代码只抓取了JSON最外层的根级键(比如示例里的class、address),但你需要的是这些根级键对应对象值里的直接子键(比如id、name或者目标键country)。要实现这个,得在遍历根级键的基础上,再对每个根级值做判断——如果它是对象,就进一步遍历它的子键。
方案一:直接遍历并匹配目标键
这种方式适合你不需要收集所有子键,只想找到匹配的目标键并执行操作的场景:
const jsonFile = require("./data.json"); const matchData = "country"; // 遍历所有根级键 for (const rootKey of Object.keys(jsonFile)) { const rootValue = jsonFile[rootKey]; // 先判断当前根级值是否为纯对象(排除数组、null等情况) if (typeof rootValue === 'object' && rootValue !== null && rootValue.constructor === Object) { // 遍历该对象的所有子键 for (const childKey of Object.keys(rootValue)) { if (childKey === matchData) { // 找到匹配的子键,执行你的业务操作 console.log(`匹配成功!键:${childKey},对应值:${rootValue[childKey]}`); // 这里可以添加你需要的逻辑,比如返回结果、修改数据等 } } } }
方案二:先收集所有根级子键,再匹配
如果你需要先把所有根级子键都收集起来,之后再做匹配或其他处理,可以用这个方式:
const jsonFile = require("./data.json"); const matchData = "country"; const allRootChildKeys = []; // 遍历根级键,收集所有子键 for (const rootKey of Object.keys(jsonFile)) { const rootValue = jsonFile[rootKey]; // 仅处理纯对象类型的根级值 if (typeof rootValue === 'object' && rootValue !== null && rootValue.constructor === Object) { // 将子键添加到收集数组中 allRootChildKeys.push(...Object.keys(rootValue)); } } console.log("所有根级子键:", allRootChildKeys); // 查找匹配的键 const matchedKey = allRootChildKeys.find(key => key === matchData); if (matchedKey) { console.log(`找到目标键:${matchedKey}`); // 这里可以继续处理匹配到的键对应的逻辑 } else { console.log(`未找到目标键:${matchData}`); }
关键说明
- 为什么要加
rootValue.constructor === Object?因为typeof []也会返回object,如果你的JSON根级有数组,而你不想处理数组里的子键,这个判断可以帮你只筛选纯对象。如果需要处理数组,可以去掉这个条件,或者单独加数组的处理逻辑。 - 加
rootValue !== null是因为typeof null也会返回object,避免空值导致报错。
内容的提问来源于stack exchange,提问作者I am a Student
相关产品推荐
相关产品推荐

