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

如何使用原生JavaScript解析JSON并循环提取多对象用户名

解决重复键JSON的解析与遍历问题

你遇到的核心问题是JSON规范不允许重复键名,所以JSON.parse会自动覆盖前面的sec对象,只保留最后一个。要实现遍历所有sec对象的需求,我们需要先修正原始JSON字符串的结构,把重复的sec键转为数组形式,再进行解析和处理。

步骤1:修正JSON字符串结构

我们可以用正则表达式替换,把多个独立的sec对象包装成一个数组(比如命名为secs):

var JSONobj = `{ 
  "sec" : {
    "username"  : "ac12",
    "location"  : "Indian Ocean",
    "online"    : true
  },
  "sec" : {
    "username"  : "gg66",
    "location"  : "Pacific Ocean",
    "online"    : false
  },
  "sec" : {
    "username"  : "test123",
    "location"  : "Atlantic Ocean",
    "online"    : false
  }
}`;

// 修正结构:将重复的sec键转为数组
var correctedJsonStr = JSONobj
  // 把开头的"{ "sec" : {"替换为"{ "secs" : ["
  .replace(/^\{\s*"sec"\s*:/, '{ "secs" : [')
  // 把所有中间的", "sec" : {"替换为", "
  .replace(/,\s*"sec"\s*:/g, ', ')
  // 把结尾的"}"替换为"]}"
  .replace(/\s*\}$/, ' ]}');

步骤2:解析并遍历提取数据

修正后的JSON结构是有效的,现在可以正常解析并遍历数组提取username:

// 解析修正后的JSON
var obj = JSON.parse(correctedJsonStr);

// 遍历secs数组,提取每个对象的username
obj.secs.forEach(secItem => {
  console.log(`Sec - username = ${secItem.username}`);
});

运行结果

执行后控制台会输出:

Sec - username = ac12
Sec - username = gg66
Sec - username = test123

注意事项

  • 这个正则替换是针对你提供的JSON格式编写的,如果原始JSON的空白字符、键名格式有变化,可能需要微调正则表达式。
  • 如果你能控制JSON的生成端,最好直接生成数组格式的JSON(比如一开始就用"secs": [{}, {}, {}]),这比事后修正更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:19:35