求助:无法将字典对象正确写入为JSON文件的技术问题
解决Python中字典对象无法正确写入JSON文件的问题
我看你正在处理一段JSON数据的提取、转换和写入工作,遇到了字典没法正确写入JSON文件的问题。先把你给出的原始JSON数据贴出来方便参考:
{ "metadata": { "info": "important info" }, "timestamp": "2018-04-06T12:19:38.611Z", "content": { "id": "1", "name": "name test", "objects": [ { "id": "1", "url": "http://example.com", "properties": [ { "id": "1", "value": "1" } ] } ] } }
结合你的需求(提取数值、转换后写入新JSON),大概率是你直接尝试把Python字典对象写入文件,而没有用JSON序列化工具,或者忽略了一些关键的写入参数。下面给你一个完整的可运行代码示例,包含从读取到写入的全流程:
import json def process_json(input_file, output_file): # 第一步:读取并解析原始JSON文件 with open(input_file, 'r', encoding='utf-8') as f: raw_data = json.load(f) # 第二步:提取需要的数值并转换(这里以把properties里的value从字符串转整数为例) target_value = raw_data['content']['objects'][0]['properties'][0]['value'] converted_value = int(target_value) # 完成字符串到整数的转换 # 第三步:构造你需要的新JSON结构(可根据实际需求调整) processed_data = { "source_timestamp": raw_data['timestamp'], "content_summary": { "object_id": raw_data['content']['objects'][0]['id'], "converted_property_value": converted_value }, "metadata_info": raw_data['metadata']['info'] } # 第四步:将字典写入为JSON文件(这一步是关键,别直接用file.write()写字典) with open(output_file, 'w', encoding='utf-8') as f: # ensure_ascii=False 保证非ASCII字符正常保存,indent=4 让JSON格式更易读 json.dump(processed_data, f, ensure_ascii=False, indent=4) # 替换成你的实际文件路径 process_json("input.json", "output.json")
这里要注意几个关键的点,也是容易踩坑的地方:
- 绝对不能直接用
file.write(字典对象),因为字典是Python的内置对象,不是JSON字符串,必须用json.dump()(直接写入文件)或者json.dumps()(先转成字符串再写入)来完成序列化。 - 指定
encoding='utf-8'可以避免写入时出现乱码问题,尤其是处理包含中文或特殊字符的内容时。 ensure_ascii=False参数很实用,它会让JSON里的非ASCII字符直接保存,而不是被转义成\uXXXX的形式。indent=4是可选的,但加上后生成的JSON文件会有缩进,可读性大大提升。
如果你的代码里还有其他特殊情况(比如要处理不可序列化的Python类型,比如datetime对象),可以再补充自定义的JSON编码器,但从你给出的场景来看,上面的代码应该能解决你的问题。
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

