JSON Dump时字典值被输出为字符串的问题解决方法
解决JSON Dump后字典值被转为字符串的问题
兄弟,这个问题我之前也踩过坑——核心问题出在你循环拼接JSON字符串的操作上,而不是json.dump本身的问题。
为什么会出现这个问题?
当你在循环里手动拼接JSON格式的字符串时,相当于把所有内容都变成了一个大的字符串。之后把这个字符串传给json.dump,它会把整个字符串当作一个JSON的字符串值来处理,自然输出的结果里所有内容都被包裹在引号里,变成了字符串类型,完全不符合你想要的原生JSON结构(数字、布尔值、嵌套对象等)。
正确的做法:直接操作Python原生数据结构
你应该抛弃手动拼接字符串的方式,转而在循环中构建Python的字典(或列表)对象,确保每个值都是对应的原生类型(比如数字用int/float,布尔值用True/False,而不是字符串形式的"123"或"true"),最后再用json.dump序列化这个对象。
举个对比例子:
错误的写法(导致值变字符串)
import json # 模拟你的列表数据 data_list = [{"key": "age", "value": "25"}, {"key": "is_student", "value": "true"}] # 手动拼接JSON字符串 result_str = "{" for item in data_list: result_str += f'"{item["key"]}": "{item["value"]}",' result_str = result_str.rstrip(",") + "}" with open("wrong_output.json", "w") as f: json.dump(result_str, f)
输出的wrong_output.json内容会是:
"{\"age\": \"25\", \"is_student\": \"true\"}"
整个内容就是一个字符串,完全不是预期的JSON对象。
正确的写法(保持原生类型)
import json data_list = [{"key": "age", "value": "25"}, {"key": "is_student", "value": "true"}] # 初始化空字典,循环中填充原生类型的值 result_dict = {} for item in data_list: key = item["key"] value = item["value"] # 根据实际数据类型做转换,确保值是Python原生类型 if key == "age": result_dict[key] = int(value) elif key == "is_student": result_dict[key] = value.lower() == "true" # 其他类型同理,比如浮点数用float(value),直接保留字符串就不用转换 with open("correct_output.json", "w") as f: json.dump(result_dict, f, indent=4)
输出的correct_output.json内容会是:
{ "age": 25, "is_student": true }
完美保留了数字和布尔值的原生类型,完全符合预期。
关键总结
- 永远不要手动拼接JSON字符串,交给Python的
json模块处理序列化工作更可靠。 - 确保循环中构建的Python字典/列表里,每个值都是对应的原生类型(不要把数字、布尔值存成字符串)。
- 如果原始数据是字符串形式的非字符串类型(比如"25"、"true"),一定要在赋值时做类型转换。
内容的提问来源于stack exchange,提问作者oj43085
相关产品推荐
相关产品推荐

