Python中如何修改JSON数据?

有一个比较大的 json 文件。每一行都是一个单独的 json 文件。

现在想单独对某些行的 json 文件进行修改。目前的想法是遍历每一行,判断是否是需要修改的,然后将这行保存到另一个文件中。

现在想知道有没有办法可以在原文件里面直接修改想修改的部分?


with open('test.json', r+) as f:
	for line in f:
    	line = json.loads(line)
    	if line is target:
		line['sth'] = 'new'

有没有办法可以把修改后的 line 保存或者说替换原来的那行? 谢谢!


Python中如何修改JSON数据?

9 回复

如果每一行修改前后所占用的 字节数 不变化则可以,你可以手动 seek 到需要修改的位置,写入新的内容,然后 seek 到下一个位置,依次类推,否则重建一个文件比较简单。


在Python里修改JSON数据,最直接的方法是:先解析成Python对象(比如字典或列表),修改这个对象,然后再序列化回JSON字符串。

核心步骤:

  1. 加载(解析):使用 json.loads() 将JSON字符串转为Python字典/列表,或者用 json.load() 从文件读取并转换。
  2. 修改:像操作普通字典或列表一样修改数据。
  3. 保存(序列化):使用 json.dumps() 将修改后的Python对象转回JSON字符串,或者用 json.dump() 写入文件。

代码示例: 假设我们有一个包含用户信息的JSON字符串,需要更新年龄并添加邮箱。

import json

# 1. 原始JSON数据 (字符串形式)
original_json = '''
{
  "name": "张三",
  "age": 25,
  "city": "北京"
}
'''

# 2. 解析为Python字典
data_dict = json.loads(original_json)
print("解析后的字典:", data_dict)

# 3. 修改数据
data_dict["age"] = 26  # 更新年龄
data_dict["email"] = "zhangsan@example.com"  # 添加新字段

# 4. 转换回JSON字符串
modified_json = json.dumps(data_dict, ensure_ascii=False, indent=2)  # ensure_ascii=False确保中文正常显示,indent美化格式
print("修改后的JSON字符串:")
print(modified_json)

如果数据在文件里(比如 data.json),操作流程类似:

import json

# 从文件读取并解析
with open('data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)

# 修改数据
data['age'] = 26

# 写回文件
with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

简单来说:把JSON变成字典,改字典,再变回去。

可以
n = 0 #n 为操作标记位置
f.readline() #读取第一行
n1 = n #保存上一个 n
n = f.tell() #更新 n
if 需要修改:
f.seek(n1) 返回上一个标记位置
f.writelines(“内容”)

大概就是这样

这样啊,谢谢!

楼主搞定了,最好反馈一下,这样搞会不会快,快了多少

谢谢!

这个方法是不是也要考虑一楼说的那个字节数要相同?我刚试了一下发现如果不一样的话会把后面的覆盖掉。

一楼二楼的做法都是在指定的字节数限制之内写新的内容,只是一楼是说每行字节数一致,二楼是说用代码来获取这一行的字节数。
另外楼主如果你新的内容长度和原来不一致的话就不能用这种方法了。

哦哦,这样,明白了!谢谢!

可能跑题了,但是如果不用 python ,可以直接用命令行里的 sed ,加个-i 就是在原文件修改了

回到顶部