Windows下Python修改JSON键值后Git误判文件为新文件如何解决?
解决Bitbucket PR中JSON文件被识别为新文件的问题
问题原因
你通过json.dump写入修改后的JSON时,生成的文件在缩进、换行符、编码这些细节上和原文件不一致,Git没法识别出只是局部修改,直接判定成了全新文件。
解决步骤
1. 对齐原文件的缩进规则
先查看原JSON文件用的是4个空格、2个空格还是制表符(Tab),然后在json.dump里指定对应参数:
- 原文件用制表符的话:
json.dump(data, jsonFile, indent='\t') - 原文件用2个空格的话:
json.dump(data, jsonFile, indent=2)
2. 匹配原文件的换行符
Windows系统换行符是\r\n,Linux/macOS是\n,json.dump默认用当前系统的换行符,你可以通过newline参数强制和原文件一致:
with open(filename_write, 'w', newline='\n') as jsonFile: # 原文件是Windows格式就改成'\r\n' json.dump(data, jsonFile, indent=4)
3. 统一文件编码
打开文件时明确指定原文件的编码(比如utf-8),避免编码差异导致文件内容整体变动:
with open(filename_write, 'r', encoding='utf-8') as jsonFile: data = json.load(jsonFile) data['test']['ariel']['version'] = value with open(filename_write, 'w', encoding='utf-8') as jsonFile: json.dump(data, jsonFile, indent=4)
4. 本地先验证差异
修改完后在本地执行git diff,如果输出里只有你改的那一行键值变化,说明格式匹配了;如果显示整个文件被替换,就回去调整缩进、换行符这些参数。
5. 用官方工具辅助对齐格式
可以用Python自带的json.tool把原文件格式化,对比你的输出文件:
python -m json.tool original.json > formatted.json
把你生成的文件和formatted.json对比,确保格式完全一致。
内容的提问来源于stack exchange,提问作者arielma
相关产品推荐
相关产品推荐

