JavaScript 中JSON 数据遍历

news/2025/12/1 16:02:32/文章来源:https://www.cnblogs.com/GreatPlanHero/p/19293111

JavaScript 中JSON 数据遍历

1. JSON 字符串转对象后遍历

1.1 解析 JSON 字符串

const jsonString = '{"users": [{"id": 1, "name": "张三"}, {"id": 2, "name": "李四"}]}';
const data = JSON.parse(jsonString);// 遍历数组
data.users.forEach(user => {console.log(`ID: ${user.id}, 姓名: ${user.name}`);
});// 1.2 从 API 获取的 JSON
fetch('/api/user/realname/王').then(response => response.json()).then(data => {// 遍历返回的 JSON 数据if (Array.isArray(data)) {data.forEach(user => {console.log(user.realname, user.email);});}});

2. 遍历 JSON 对象(Object)

const user = {"id": 1,"username": "zhangsan","realname": "张三","email": "zhangsan@example.com","department": {"id": 101,"name": "技术部"}
};// 2.1 Object.keys() + forEach
Object.keys(user).forEach(key => {console.log(`${key}: ${user[key]}`);
});// 2.2 for...in 循环(会遍历原型链属性)
for (const key in user) {if (user.hasOwnProperty(key)) {console.log(`${key}: ${user[key]}`);}
}// 2.3 Object.entries() - 获取键值对数组
Object.entries(user).forEach(([key, value]) => {console.log(`${key}: ${JSON.stringify(value)}`);
});// 2.4 Object.values() - 只获取值
Object.values(user).forEach(value => {console.log(value);
});

3. 遍历嵌套的 JSON 数据

const company = {"companyName": "ABC公司","departments": [{"id": 1,"name": "技术部","employees": [{"id": 101, "name": "张三", "role": "前端开发"},{"id": 102, "name": "李四", "role": "后端开发"}]},{"id": 2,"name": "市场部","employees": [{"id": 201, "name": "王五", "role": "市场专员"}]}]
};// 3.1 多层嵌套遍历
company.departments.forEach(dept => {console.log(`部门: ${dept.name}`);dept.employees.forEach(emp => {console.log(`  - ${emp.name} (${emp.role})`);});
});// 3.2 递归遍历所有属性
function traverseJSON(obj, depth = 0) {const indent = '  '.repeat(depth);if (Array.isArray(obj)) {obj.forEach(item => traverseJSON(item, depth + 1));} else if (obj !== null && typeof obj === 'object') {Object.entries(obj).forEach(([key, value]) => {if (typeof value === 'object') {console.log(`${indent}${key}:`);traverseJSON(value, depth + 1);} else {console.log(`${indent}${key}: ${value}`);}});} else {console.log(`${indent}${obj}`);}
}traverseJSON(company);

4. 处理从 API 返回的 JSON 数据

// 假设 API 返回:{ "success": true, "data": [{...}, {...}], "total": 2 }async function fetchAndProcessUsers() {try {const response = await fetch('/api/users');const result = await response.json();// 4.1 检查 API 返回状态if (!result.success) {throw new Error(result.message || '请求失败');}// 4.2 遍历数据const users = result.data;// 方式1: 简单遍历users.forEach((user, index) => {console.log(`用户${index + 1}:`, user);});// 方式2: 使用 map 转换数据const userNames = users.map(user => ({id: user.id,displayName: `${user.realname} (${user.username})`,department: user.deptname}));// 方式3: 使用 filter 筛选const activeUsers = users.filter(user => user.status === 'active' && user.deptname === '技术部');// 方式4: 使用 reduce 统计const departmentCount = users.reduce((acc, user) => {acc[user.deptname] = (acc[user.deptname] || 0) + 1;return acc;}, {});console.log('部门统计:', departmentCount);return userNames;} catch (error) {console.error('处理数据失败:', error);}
}

5. 将遍历结果转为 HTML

async function displayUsersInTable() {const response = await fetch('/api/user/realname/王');const users = await response.json();const tableBody = document.querySelector('#userTable tbody');tableBody.innerHTML = ''; // 清空现有内容// 遍历 JSON 数据生成表格行users.forEach(user => {const row = document.createElement('tr');// 创建单元格const cells = [user.id,user.realname,user.username,user.deptname,user.mobile,user.email];cells.forEach(cellData => {const cell = document.createElement('td');cell.textContent = cellData || 'N/A';row.appendChild(cell);});// 添加操作按钮const actionCell = document.createElement('td');actionCell.innerHTML = `<button onclick="editUser(${user.id})">编辑</button><button onclick="deleteUser(${user.id})">删除</button>`;row.appendChild(actionCell);tableBody.appendChild(row);});
}

使用模板字符串

function displayUsersWithTemplate(users) {const container = document.getElementById('userContainer');const userCards = users.map(user => `<div class="user-card"><h3>${escapeHtml(user.realname)}</h3><p><strong>用户名:</strong> ${escapeHtml(user.username)}</p><p><strong>部门:</strong> ${escapeHtml(user.deptname || '未分配')}</p><p><strong>手机:</strong> ${escapeHtml(user.mobile || 'N/A')}</p><p><strong>邮箱:</strong> ${escapeHtml(user.email || 'N/A')}</p><button class="btn-view" data-id="${user.id}">查看详情</button></div>`).join('');container.innerHTML = userCards;// 添加事件监听container.querySelectorAll('.btn-view').forEach(button => {button.addEventListener('click', (e) => {const userId = e.target.dataset.id;viewUserDetail(userId);});});
}

防止 XSS 攻击的简单转义函数

function escapeHtml(text) {const div = document.createElement('div');div.textContent = text;return div.innerHTML;
}

6. 使用现代 JavaScript 特性

6.1 使用可选链和空值合并

users?.forEach(user => {const email = user.email ?? '暂无邮箱';const dept = user.department?.name ?? '未分配部门';console.log(`${user.realname} - ${dept} - ${email}`);
});

6.2 使用解构赋值

users.forEach(({ id, realname: name, email = '无邮箱' }) => {console.log(`ID: ${id}, 姓名: ${name}, 邮箱: ${email}`);
});

6.3 使用 flatMap 处理嵌套数组

const allEmployees = companyData.departments.flatMap(dept => dept.employees.map(emp => ({...emp,department: dept.name}))
);

6.4 使用 Set 去重

const uniqueDepartments = [...new Set(users.map(user => user.deptname))];

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/983091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这家法兰螺母企业,凭什么获超高评价?

在竞争激烈的汽车零部件制造领域,法兰螺母作为关键连接件,其质量直接关系到整车安全性与可靠性。然而,在浙南地区,一家名为温州新阳标准件有限公司的企业,却凭借硬核实力脱颖而出,不仅成为多家知名车企的长期供应…

[IPv6] [Ubuntu] IPv6测试配置手册(Ubuntu22.04)

[IPv6] [Ubuntu] IPv6测试配置手册(Ubuntu22.04)$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录Ubuntu22.04 IPv6 测试配置手册00 设备参数01 禁止网络…

2025年江西十大智能出入口解决方案企业推荐,百胜智能靠谱企

在智慧城市建设加速推进的背景下,智能出入口控制与管理成为城市运行效率提升的关键环节。面对市场上众多相关企业,如何选择靠谱的合作伙伴?以下依据技术实力、服务能力与市场口碑,为你推荐2025年江西十大智能出入口…

2025年口碑好的干锅鸭品牌推荐:售后完善、口碑不错的干锅鸭

在餐饮消费升级的浪潮中,干锅鸭凭借独特的风味与社交属性成为大众喜爱的美食品类,但市场上品牌良莠不齐,消费者与创业者往往难以辨别。以下结合售后完善口碑不错口碑好三大核心维度,推荐2025年五大值得关注的干锅鸭…

电商国际短信群发平台推荐:营销短信平台服务与国际短信API接口对接选型指南

在全球化业务高速扩张的2025年,电商国际短信群发平台、营销短信平台服务、国际短信API接口已成为企业出海的关键基础设施。面对复杂的区域合规要求、高并发场景稳定性及成本控制三重挑战,ITNIO TECH 颂量以“技术+资…

canvas在组件中循环画图时图片闪烁

起因 && bug 复现 有一个页面,要用 canvas 画出背景图片和文字,并且定时刷新页面。 这个图分三层, 第一层画红色和蓝色的矩形框,第二层画背景图,第三层写文字。原来的代码中我直接把canvasContext.fillRe…

博士留学中介权威排名:面试辅导不过关的机构直接出局!

博士申请的 “生死线” 藏在面试环节 —— 即便背景与全奖适配,面试应答失误仍会导致功亏一篑。2025 年面试形式更趋复杂,学术追问深度、跨文化沟通要求同步升级,辅导体系薄弱的机构已难以应对。以下以星级评分(★…

[Vue]AntV1.7表格自带筛选确定和重置按钮位置交换

原来:修改后:代码如下: <style scope> /* 表格筛选器按钮样式 */ :deep(.ant-table-filter-dropdown-btns) {display: flex;flex-direction: row-reverse;justify-content: flex-start;padding: 8px;border-t…

2025年中国传统干锅鸭品牌推荐:好的干锅鸭大型品牌推荐有哪

本榜单依托全国餐饮消费调研数据、大众点评/抖音等平台真实口碑及品牌连锁规模,筛选出五家标杆干锅鸭品牌,为消费者选店、创业者加盟提供客观参考,助力匹配高性价比的餐饮品牌伙伴。 TOP1 推荐:商丘任广涛餐饮管…

PCIe-8052 双口万兆光纤图像采集卡:万兆传输赋能,解锁工业采集新速度

在工业自动化图像采集领域,随着高清化、高速化采集需求的不断升级,设备的传输速率、稳定性与兼容性成为制约产线效率的关键因素。PCIe-8052 双口万兆光纤图像采集卡凭借其万兆传输性能、高性能硬件配置及**的适配能力…

构建人机共生的价值基石:LLM与人类协同构建价值原语行为网络

构建人机共生的价值基石:LLM与人类协同构建价值原语行为网络 摘要 本文提出一种实现“AI元人文”构想的具体技术路径:构建一个人机协同、动态演化的价值原语行为网络。该路径的核心在于,将大语言模型视为强大的“价…

2025博士留学中介权力榜:前八谁的导师网络最硬核?

博士申请的 “隐形权力” 藏在导师网络里 —— 网络的广度决定选择边界,深度决定资源质量,活性决定对接实效。2025 年申博季,硬核的导师网络已成为机构核心竞争力的终极体现。以下以星级评分(★★★★★为满)解析…

123年时光淬炼:从瑞士乡村集体创业到GPHG入围的HEBE镂空制表传奇

HEBE Watch 于 1901 年在 Arc Jurassien 的瑞士小镇 Alle 成立,是村民集体创业的结果,随着时间的推移,他们在钟表的不同领域获得了各种技能。这些钟表专家统一植根于该地区的手工制表传统。在冬季,农作物无法种植,…

SpringCloud Feign首次调用慢解决方案

一、概述 Feign作为Spring Cloud中声明式HTTP客户端,首次调用慢是高频问题,核心成因包括懒加载初始化、连接池未预热、DNS解析耗时、Hystrix/Sentinel初始化等,先明确首次调用慢的核心环节,避免盲目优化:慢调用环…

2025年下半年内蒙古承载力检测服务商Top5推荐指南

摘要 2025年下半年,内蒙古地区承载力检测行业随着基础设施建设的加速发展,需求持续增长,专业检测服务商的重要性日益凸显。本文提供一份推荐榜单,涵盖五家优质公司,排名不分先后,旨在为用户提供参考。榜单基于行…

2025年特种工业泵供应商权威推荐榜单:工业泵/充填工业泵/耐磨泵源头厂家精选

特种工业泵作为现代工业流程中的核心动力与传输设备,其性能直接关系到生产系统的稳定性、能源消耗与运营安全。在化工、矿山、冶金、能源及污水处理等高要求领域,对泵类产品的耐腐蚀性、耐磨耗性、防爆安全性及智能控…

2025年下半年房屋检测公司推荐排行榜:内蒙古鑫质检测有限公司领跑行业

摘要 2025年下半年房屋检测行业迎来新一轮技术升级与服务优化,随着内蒙古地区城镇化进程加快和老旧小区改造需求增长,专业房屋检测服务成为保障建筑安全的重要环节。本文基于市场调研数据、用户口碑评价和技术实力评…

2025年高口碑灌浆防水涂料公司推荐,解决您的防水烦恼!

在寻求修补防水涂料厂家的过程中,了解各公司的产品特性和市场口碑显得尤为重要。尤其是在2025年,信息的透明性和有效的对比能够帮助消费者做出明智的选择。我们推荐的几家公司,如重庆市高新技术产业开发区高和建筑材…

现今靠谱的短视频运营团队排行榜单

摘要 随着短视频平台的快速发展,2025年短视频运营行业已成为企业营销的核心渠道,市场规模预计突破千亿元。企业通过专业团队提升品牌曝光和获客效率至关重要。本文基于行业数据和用户口碑,整理出前十名靠谱的短视频…

想找闸机租赁源头厂家,这几点一定要知道!

在当今各类商业活动、公共场合中,闸机的使用越来越广泛。对于一些临时性活动或者预算有限的场所来说,闸机租赁成为了一个不错的选择。然而,要找到靠谱的闸机租赁源头厂家,有几点是一定要了解清楚的。 1、成本优势考…