如何遍历一个JSON数据:从基础到实践的全面指南
JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其易读性和灵活性,已成为前后端数据交互的主流选择,在实际开发中,我们经常需要从JSON数据中提取、处理或展示特定内容,这就离不开对JSON的遍历,无论是简单的键值对读取,还是复杂嵌套结构的解析,遍历JSON的方法都是开发者的必备技能,本文将从JSON的基础结构出发,详细介绍不同场景下的遍历技巧,并结合代码示例帮助读者快速上手。
JSON数据的基础结构
在遍历JSON之前,首先要明确其核心结构,JSON数据主要由两种类型组成:
-
对象(Object):用 表示,由无序的键值对组成,键(key)必须是字符串,值(value)可以是任意类型(字符串、数字、布尔值、数组、对象等)。
{ "name": "张三", "age": 25, "isStudent": false, "courses": ["数学", "英语"], "address": { "city": "北京", "district": "海淀区" } } -
数组(Array):用
[]表示,由有序的值列表组成,值可以是任意类型(包括对象和数组)。[ {"id": 1, "name": "苹果"}, {"id": 2, "name": "香蕉"}, {"id": 3, "name": "橙子"} ]
理解这两种结构是遍历JSON的前提——遍历的本质就是逐层访问对象中的键或数组中的元素。
遍历JSON的常见方法
根据JSON的类型(对象或数组)和遍历场景(前端/后端),遍历方法有所不同,以下是几种主流语言的实现方式。
(一)前端JavaScript:原生方法与函数式编程
JavaScript作为JSON的“原生语言”,提供了多种遍历JSON对象和数组的方法。
遍历JSON对象
JSON对象的遍历通常针对其键值对,核心方法是 for...in 循环和 Object.keys() + forEach。
-
for...in循环:遍历对象的可枚举属性(包括继承的属性,需结合hasOwnProperty过滤)。const user = { name: "张三", age: 25, isStudent: false }; for (let key in user) { if (user.hasOwnProperty(key)) { // 过滤继承属性 console.log(key + ": " + user[key]); } } // 输出: // name: 张三 // age: 25 // isStudent: false -
Object.keys()+forEach:Object.keys()返回对象自身可枚举属性的键数组,再通过forEach遍历。const user = { name: "张三", age: 25 }; Object.keys(user).forEach(key => { console.log(key + ": " + user[key]); });
遍历JSON数组
JSON数组的遍历更常见,核心方法是 for 循环、forEach、for...of 以及高阶函数(map、filter、reduce)。
-
for循环:基础方法,通过索引逐个访问元素。const courses = ["数学", "英语", "物理"]; for (let i = 0; i < courses.length; i++) { console.log("课程" + (i + 1) + ": " + courses[i]); } -
forEach:数组原生方法,遍历每个元素并执行回调函数(无法中途退出)。const courses = ["数学", "英语", "物理"]; courses.forEach((course, index) => { console.log("课程" + (index + 1) + ": " + course); }); -
for...of:ES6新增,可遍历数组/字符串等可迭代对象,语法简洁。const courses = ["数学", "英语", "物理"]; for (const course of courses) { console.log("课程: " + course); } -
高阶函数(数据处理):
map(转换)、filter(过滤)、reduce(聚合)等,适合复杂数据处理。const students = [ { id: 1, name: "张三", score: 85 }, { id: 2, name: "李四", score: 92 }, { id: 3, name: "王五", score: 78 } ]; // 提取所有学生姓名(map) const names = students.map(student => student.name); console.log(names); // ["张三", "李四", "王五"] // 筛选及格学生(filter) const passedStudents = students.filter(student => student.score >= 80); console.log(passedStudents); // [{id:1, name:"张三", score:85}, {id:2, name:"李四", score:92}] // 计算平均分(reduce) const avgScore = students.reduce((sum, student) => sum + student.score, 0) / students.length; console.log(avgScore); // 85
遍历嵌套JSON
实际开发中,JSON数据常嵌套多层(如对象中包含数组,数组中又嵌套对象),遍历嵌套JSON的核心是递归:逐层进入子结构,直到处理到最内层的基本数据类型。
示例:遍历包含对象和数组的嵌套JSON
const data = {
name: "张三",
hobbies: ["篮球", "编程"],
address: {
city: "北京",
areas: ["海淀区", "朝阳区"]
}
};
function traverseJSON(obj) {
for (let key in obj) {
if (typeof obj[key] === "object" && obj[key] !== null) {
// 如果是数组或对象,递归遍历
console.log("进入嵌套结构: " + key);
traverseJSON(obj[key]);
} else {
// 基本类型,直接输出
console.log(key + ": " + obj[key]);
}
}
}
traverseJSON(data);
// 输出:
// name: 张三
// 进入嵌套结构: hobbies
// 0: 篮球
// 1: 编程
// 进入嵌套结构: address
// city: 北京
// 进入嵌套结构: areas
// 0: 海淀区
// 1: 朝阳区
(二)Python:字典与列表的遍历
Python中,JSON数据会被解析为字典(dict,对应JSON对象)和列表(list,对应JSON数组),遍历方法同样灵活。
遍历JSON对象(字典)
-
items()方法:同时获取键和值,最常用。import json user_json = '{"name": "张三", "age": 25, "isStudent": false}' user = json.loads(user_json) # 解析为字典 for key, value in user.items(): print(f"{key}: {value}") # 输出: # name: 张三 # age: 25 # isStudent: False -
keys()/values():分别遍历键或值。for key in user.keys(): print(f"键: {key}") for value in user.values(): print(f"值: {value}")
遍历JSON数组(列表)
-
for循环:直接遍历列表元素。courses_json = '["数学", "英语", "物理"]' courses = json.loads(courses_json) # 解析为列表 for index, course in enumerate(courses, start=1): # enumerate获取索引 print(f"课程{index}: {course}") -
列表推导式:简洁的遍历+处理方式。
# 提取所有课程名(转大写) upper_courses = [course.upper() for course in courses] print(upper_courses) # ['数学', '英语', '物理'](需确保支持中文编码)
遍历嵌套JSON
Python的递归遍历与JavaScript类似,通过 type() 判断数据类型,递归处理字典或列表。
示例:
def traverse_json(data):
if isinstance(data, dict):


还没有评论,来说两句吧...