You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript遍历嵌套JSON:提取内外层数字键的技术咨询

提取JSON多层数字键的解决方案

我最近遇到了一个特殊的JSON结构处理场景,需要提取外层的数字键(比如0、1)以及内层的所有数字键(不需要对应的字符串值)。先来看一下这个JSON结构:

{ 
  "0":{ 
    "-1":"", 
    "0":"VOR_CVR", 
    "1":"VOR_CVR2", 
    "2":"VOR_CVR3", 
    "3":"VOR_CVR4", 
    "4":"VOR_CVR5" 
  }, 
  "1":{ 
    "-1":"", 
    "0":"VOR_RMV", 
    "1":"VOR_FND", 
    "2":"VOR_FND2", 
    "3":"FAGGIO3_MGUARD1", 
    "4":"VOR_FND3", 
    "5":"VOR_FND4" 
  } 
}

最开始我写了一段代码尝试提取这些键,但发现输出会重复打印外层键(比如外层0会跟着每个内层键打印一次),代码如下:

var string = `{ "0":{ "-1":"", "0":"VOR_CVR", "1":"VOR_CVR2", "2":"VOR_CVR3", "3":"VOR_CVR4", "4":"VOR_CVR5" }, "1":{ "-1":"", "0":"VOR_RMV", "1":"VOR_FND", "2":"VOR_FND2", "3":"FAGGIO3_MGUARD1", "4":"VOR_FND3", "5":"VOR_FND4" } }`
var mods = JSON.parse(string); //contains the json string
for (var key in mods) {
    for (var key2 in mods[key]) {
        console.log(key);
        console.log(key2);
    }
}

针对这个问题,我整理了两种更贴合需求的解决方案:

方案1:收集所有不重复的外层键和内层键

如果你的需求是把所有外层键和内层键分别收集到数组中(避免重复),可以用这种方式:

const string = `{ "0":{ "-1":"", "0":"VOR_CVR", "1":"VOR_CVR2", "2":"VOR_CVR3", "3":"VOR_CVR4", "4":"VOR_CVR5" }, "1":{ "-1":"", "0":"VOR_RMV", "1":"VOR_FND", "2":"VOR_FND2", "3":"FAGGIO3_MGUARD1", "4":"VOR_FND3", "5":"VOR_FND4" } }`;
const mods = JSON.parse(string);

const outerKeys = [];
const innerKeys = [];

for (const key in mods) {
  outerKeys.push(key);
  // 遍历内层对象的所有键并收集
  for (const key2 in mods[key]) {
    innerKeys.push(key2);
  }
}

console.log("外层键:", outerKeys);
// 输出: 外层键: ["0", "1"]
console.log("内层键:", innerKeys);
// 输出: 内层键: ["-1", "0", "1", "2", "3", "4", "-1", "0", "1", "2", "3", "4", "5"]

如果需要去除内层键的重复值,可以在push前判断是否已存在:

if (!innerKeys.includes(key2)) {
  innerKeys.push(key2);
}

方案2:按层级清晰展示键

如果想要更直观地展示层级关系(外层键只打印一次,随后列出对应的所有内层键),可以用这种写法:

const string = `{ "0":{ "-1":"", "0":"VOR_CVR", "1":"VOR_CVR2", "2":"VOR_CVR3", "3":"VOR_CVR4", "4":"VOR_CVR5" }, "1":{ "-1":"", "0":"VOR_RMV", "1":"VOR_FND", "2":"VOR_FND2", "3":"FAGGIO3_MGUARD1", "4":"VOR_FND3", "5":"VOR_FND4" } }`;
const mods = JSON.parse(string);

for (const key in mods) {
  console.log(`外层键: ${key}`);
  console.log("对应的内层键:");
  for (const key2 in mods[key]) {
    console.log(`- ${key2}`);
  }
  console.log("---"); // 分隔不同外层键的内容,更易读
}

这段代码的输出会是:

外层键: 0
对应的内层键:
- -1
- 0
- 1
- 2
- 3
- 4
---
外层键: 1
对应的内层键:
- -1
- 0
- 1
- 2
- 3
- 4
- 5
---

这样就能清晰地看到每个外层键对应的所有内层键,不会出现重复打印外层键的问题。

内容的提问来源于stack exchange,提问作者DarkIce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:50:46