怎么修改JSON里的值:从基础到实践的完整指南
JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其简洁、易读的特性,广泛应用于前后端数据交互、配置文件存储、API响应等场景,在实际开发中,我们经常需要根据业务需求修改JSON中的数据值——比如更新用户信息、调整配置参数、修正接口返回的错误数据等,本文将从JSON的基础结构出发,详细介绍修改JSON值的多种方法,涵盖手动编辑、编程操作(Python/JavaScript)及工具辅助,帮助不同需求的读者高效完成数据修改。
认识JSON的基本结构
在修改JSON值之前,我们需要先明确JSON的两种核心数据结构:
对象(Object)
以 包裹,由“键值对”组成,键(key)是字符串,值(value)可以是任意类型(字符串、数字、布尔值、数组、对象等),键值对之间用逗号分隔。
{
"name": "张三",
"age": 25,
"isStudent": true,
"courses": ["数学", "英语"],
"address": {
"city": "北京",
"district": "海淀区"
}
}
数组(Array)
以 [] 包裹,由多个值组成,值可以是任意类型,元素之间用逗号分隔。
[
{"id": 1, "product": "手机", "price": 2999},
{"id": 2, "product": "电脑", "price": 5999}
]
核心要点:修改JSON值的关键在于“定位目标键/索引”,然后更新对应的值,无论是对象还是数组,都需要先明确修改位置,再执行操作。
手动修改JSON值:适用于简单场景
对于小型JSON文件或临时修改,手动编辑是最直接的方式,常见工具包括文本编辑器(如VS Code、Sublime Text)、在线JSON编辑器(如JSON Editor Online)等。
操作步骤:
- 打开JSON文件:用文本编辑器打开目标JSON文件(如
data.json)。 - 定位目标键/索引:
- 若修改对象值:通过键名定位,例如修改
"name"的值,找到"name": "张三"。 - 若修改数组值:通过索引定位(索引从0开始),例如修改第一个元素的
"product"值,找到{"id": 1, "product": "手机", "price": 2999}中的"product"。
- 若修改对象值:通过键名定位,例如修改
- 修改值:直接编辑对应位置的值,注意保持数据类型一致(例如数字不要加引号,字符串要加双引号)。
- 验证格式:手动修改后容易出错,需用编辑器的“格式化”功能(如VS Code的“Shift+Alt+F”)或在线JSON校验工具(如https://jsonlint.com/)检查格式是否正确。
示例:
修改上述JSON对象中的"age"为26,"courses"数组添加一个元素"物理":
{
"name": "张三",
"age": 26, // 从25改为26
"isStudent": true,
"courses": ["数学", "英语", "物理"], // 添加"物理"
"address": {
"city": "北京",
"district": "海淀区"
}
}
适用场景:小型文件、临时修改、无需编程的场景。
缺点:文件大时效率低,重复操作易出错,无法自动化。
编程修改JSON值:适用于复杂/批量场景
当需要处理大型JSON文件、执行条件修改或批量操作时,编程是更高效的选择,以下是Python和JavaScript的常见方法。
(一)使用Python修改JSON
Python内置json模块,可轻松实现JSON的读写和修改。
核心步骤:
- 读取JSON文件:用
json.load()转为Python字典/列表。 - 修改数据:通过字典的键或列表的索引访问并修改值。
- 写回JSON文件:用
json.dump()将修改后的数据保存为文件。
示例1:修改对象中的值
假设有文件user.json内容为:
{
"name": "张三",
"age": 25,
"address": {"city": "北京", "district": "海淀区"}
}
修改"age"为26,"city"为"上海":
import json
# 读取JSON文件
with open('user.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# 修改值
data['age'] = 26 # 修改age
data['address']['city'] = '上海' # 修改嵌套对象中的city
# 写回文件
with open('user.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4) # ensure_ascii=False支持中文,indent=4格式化
执行后user.json更新为:
{
"name": "张三",
"age": 26,
"address": {
"city": "上海",
"district": "海淀区"
}
}
示例2:修改数组中的值
假设有文件products.json内容为:
[
{"id": 1, "product": "手机", "price": 2999},
{"id": 2, "product": "电脑", "price": 5999}
]
将"id": 1的商品价格改为3299,添加一个新商品:
import json
with open('products.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# 修改数组元素
for item in data:
if item['id'] == 1:
item['price'] = 3299 # 修改手机价格
# 添加新商品
new_product = {"id": 3, "product": "平板", "price": 1999}
data.append(new_product)
# 写回文件
with open('products.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
执行后products.json更新为:
[
{
"id": 1,
"product": "手机",
"price": 3299
},
{
"id": 2,
"product": "电脑",
"price": 5999
},
{
"id": 3,
"product": "平板",
"price": 1999
}
]
进阶操作:条件修改与批量处理
将所有价格低于3000的商品价格打9折:
for item in data:
if item['price'] < 3000:
item['price'] = round(item['price'] * 0.9, 2) # 保留两位小数
(二)使用JavaScript修改JSON
JavaScript常用于前端处理JSON数据(如API响应、本地存储),也可通过Node.js处理后端JSON文件。
核心步骤:
- 解析JSON字符串:用
JSON.parse()将JSON字符串转为JavaScript对象/数组。 - 修改数据:通过对象属性或数组索引访问并修改值。
- 转换为JSON字符串:用
JSON.stringify()将修改后的数据转回JSON格式。
示例1:前端修改JSON(浏览器环境)
假设有一个JSON字符串变量:
let jsonString = '{"name": "李四", "age": 30, "hobbies": ["阅读", "旅行"]}';
let data = JSON.parse(jsonString); // 解析为对象
// 修改值
data.age = 31;
data.hobbies.push("摄影"); // 添加新爱好
// 转换回JSON字符串
let newJsonString = JSON.stringify(data, null, 2); // null表示不过滤属性,2表示缩进2空格
console.log(newJsonString);
输出:
{
"name": "李四",
"age": 31,
"hobbies": [
"阅读",
"旅行",
"摄影"
]
}
示例2:Node.js修改JSON文件
假设有文件student.json内容为:
{"name": "王五", "scores": {"math": 85, "english": 90}}
修改"math"成绩为88,添加"science"成绩95:
const fs = require('fs'); // Node.js文件系统模块
// 读取文件


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