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

NodeJS中如何提取JSON数组的唯一键(表头)?

问题:提取JSON数组中的唯一键(表头)

我有如下JSON数组数据:

[
  {
    "Name": "User1",
    "primaryRegion": "US"
  },
  {
    "Name": "user2",
    "primaryRegion": "US"
  },
  {
    "Name": "user3",
    "primaryRegion": "US"
  },
  {
    "Name": "user4",
    "primaryRegion": "US"
  },
  {
    "Name": "user5",
    "primaryRegion": "US"
  }
]

我希望提取其中的唯一键(JSON表头),得到如下数组:

["Name", "primaryRegion"]

我尝试了以下代码,但未得到预期结果:

let jsonData = JSON.parse(fs.readFileSync('./test/sampleData1.json', 'utf8'));

console.log("JSON Fields---", Object.keys(jsonData));

该代码输出为:

JSON Fields--- [
  '0', '1', '2',
  '3', '4'
]

请问如何修改代码以实现需求?


解决方案

你当前的代码直接对整个JSON数组调用Object.keys(),而数组的键就是它的索引下标(0、1、2...),所以得到的是数组序号而非对象的键。

根据你的需求,分两种场景给出修改方案:

场景1:数组内所有对象结构完全一致

直接取数组中第一个对象的键即可,效率最高:

let jsonData = JSON.parse(fs.readFileSync('./test/sampleData1.json', 'utf8'));
// 先判断数组非空,避免报错
const fields = jsonData.length > 0 ? Object.keys(jsonData[0]) : [];
console.log("JSON Fields---", fields);

场景2:数组内对象结构可能不一致

需要收集所有对象的键并去重,确保拿到所有出现过的唯一键:

let jsonData = JSON.parse(fs.readFileSync('./test/sampleData1.json', 'utf8'));
const uniqueKeys = new Set();
jsonData.forEach(item => {
  Object.keys(item).forEach(key => uniqueKeys.add(key));
});
const fields = Array.from(uniqueKeys);
console.log("JSON Fields---", fields);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:10:10