You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:14:29