抓到的JSON怎么修改?从解析到修改的完整指南
在数据驱动的时代,JSON(JavaScript Object Notation)因其轻量、易读、易解析的特性,成为前后端数据交互的主流格式,无论是爬虫抓取的网页数据、API返回的接口数据,还是配置文件中的结构化数据,我们常常会遇到“抓到的JSON需要修改”的场景——可能是调整数据结构、修正错误值,或是适配业务需求,本文将从“如何解析抓到的JSON”出发,详细讲解修改JSON的完整流程、常见方法及注意事项,帮你轻松应对各类JSON修改需求。
先搞懂:什么是JSON?为什么需要修改?
JSON是一种轻量级的数据交换格式,采用“键值对”(Key-Value Pair)的形式组织数据,结构清晰,易于机器解析和生成,一个典型的JSON示例如下:
{
"name": "张三",
"age": 25,
"isStudent": false,
"courses": [
{"subject": "数学", "score": 90},
{"subject": "英语", "score": 85}
],
"address": {
"city": "北京",
"district": "海淀区"
}
}
当我们“抓到”JSON数据时,可能是从网页响应、API接口、日志文件或数据库中获取的,这些数据往往不完全符合我们的需求,
- 字段名不符合业务规范(如
name需改为username); - 数据值有误(如
age为25但实际应为26); - 结构需调整(如将
courses数组拆分为mathScore和englishScore独立字段); - 需新增或删除字段(如增加
graduated字段标识是否毕业)。
修改JSON的核心目标是:让数据更符合业务场景,提升数据的可用性。
第一步:解析抓到的JSON——从“字符串”到“可操作对象”
无论是通过Python、JavaScript还是其他语言处理JSON,第一步都是将“抓到的JSON字符串”解析为“编程语言中的数据结构”(如Python的字典/列表、JavaScript的对象/数组),因为只有解析后,我们才能对数据进行增删改查操作。
Python:用json模块解析JSON
Python内置json模块,提供了loads()(字符串转对象)和load()(文件流转对象)方法:
import json
# 假设从网络抓取到的JSON数据(字符串格式)
json_str = '''
{
"name": "张三",
"age": 25,
"isStudent": false,
"courses": [
{"subject": "数学", "score": 90},
{"subject": "英语", "score": 85}
],
"address": {
"city": "北京",
"district": "海淀区"
}
}
'''
# 解析为Python字典(dict)和列表(list)
data = json.loads(json_str)
print(type(data)) # <class 'dict'>
print(data["name"]) # 输出: 张三
print(data["courses"][0]["score"]) # 输出: 90
JavaScript:用JSON对象解析JSON
JavaScript原生支持JSON处理,通过JSON.parse()将字符串转为对象:
// 假设从API获取的JSON数据(字符串格式)
const jsonStr = `
{
"name": "张三",
"age": 25,
"isStudent": false,
"courses": [
{"subject": "数学", "score": 90},
{"subject": "英语", "score": 85}
],
"address": {
"city": "北京",
"district": "海淀区"
}
}
`;
// 解析为JavaScript对象(Object)和数组(Array)
const data = JSON.parse(jsonStr);
console.log(typeof data); // 输出: object
console.log(data.name); // 输出: 张三
console.log(data.courses[0].score); // 输出: 90
其他语言:如Java、Go等
- Java:使用
Jackson或Gson库(如new ObjectMapper().readValue(jsonStr, User.class)); - Go:使用
encoding/json包(如json.Unmarshal([]byte(jsonStr), &data))。
核心逻辑一致:将JSON字符串转换为语言原生支持的数据结构,后续修改基于此结构进行。
核心操作:如何修改JSON数据?
解析JSON后,我们可以像操作普通字典/对象一样修改数据,以下是常见修改场景及方法(以Python和JavaScript为例,其他语言逻辑类似)。
修改“简单字段值”
直接通过键名访问并赋值即可。
示例:修改age从25为26
# Python data["age"] = 26 print(data["age"]) # 输出: 26 # JavaScript data.age = 26; // 或 data["age"] = 26; console.log(data.age); // 输出: 26
修改“嵌套字段值”
嵌套字段需逐层访问,如修改address.district为“朝阳区”。
# Python data["address"]["district"] = "朝阳区" print(data["address"]["district"]) # 输出: 朝阳区 # JavaScript data.address.district = "朝阳区"; // 或 data["address"]["district"] = "朝阳区"; console.log(data.address.district); // 输出: 朝阳区
修改“数组元素”
通过索引定位元素,再修改其字段值,将courses数组中第一个元素的score改为95。
# Python
data["courses"][0]["score"] = 95
print(data["courses"][0]) # 输出: {'subject': '数学', 'score': 95}
# JavaScript
data.courses[0].score = 95;
console.log(data.courses[0]); // 输出: {subject: '数学', score: 95}
新增字段/数组元素
直接为对象赋新键值对,或为数组添加新元素。
示例1:新增字段graduated(布尔值)
# Python data["graduated"] = True print(data["graduated"]) # 输出: True # JavaScript data.graduated = true; console.log(data.graduated); // 输出: true
示例2:为数组courses添加新课程
# Python
data["courses"].append({"subject": "物理", "score": 88})
print(data["courses"]) # 输出: 包含物理课程的新数组
# JavaScript
data.courses.push({subject: "物理", score: 88});
console.log(data.courses); // 输出: 包含物理课程的新数组
删除字段/数组元素
使用del(Python)或delete(JavaScript)操作。
示例1:删除字段isStudent
# Python del data["isStudent"] print(data) # 输出: 不再包含isStudent字段 # JavaScript delete data.isStudent; console.log(data); // 输出: 不再包含isStudent字段
示例2:删除数组courses的最后一个元素
# Python data["courses"].pop() # 默认删除最后一个元素 print(data["courses"]) # 输出: 只剩数学和英语课程 # JavaScript data.courses.pop(); // 删除最后一个元素 console.log(data.courses); // 输出: 只剩数学和英语课程
复杂修改:批量处理或条件修改
当需要根据条件修改数据(如“将所有score<60的分数改为60”)时,可结合循环实现。
示例:批量修改courses数组中的低分
# Python
for course in data["courses"]:
if course["score"] < 60:
course["score"] = 60
print(data["courses"]) # 输出: 所有分数不低于60
# JavaScript
data.courses.forEach(course => {
if (course.score < 60) {
course.score = 60;
}
});
console.log(data.courses); // 输出: 所有分数不低于60
修改后:将数据重新转换为JSON字符串
修改完成后,通常需要将数据重新转换为JSON字符串(如保存到文件、发送给前端或API),此时需使用“序列化”操作。
Python:用json.dumps()序列化
import json # 修改data后,序列化为JSON字符串(默认中文会转义为Unicode) json_str = json.dumps(data) print(json_str) # 输



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