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
相关产品推荐
相关产品推荐

