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

Python中使用for循环创建JSON文件写入变量异常问题

问题描述

我是JSON应用新手,需要创建包含10个JSON对象的JSON文件,每个对象存储传感器采集的三类数据:

  • temperature:温度
  • flow:流量
  • pressure:压力
    三类数据的取值均存储在对应变量中。目前可以完成JSON文件创建,但写入的变量始终被识别为字符串类型。
    为简化复现问题,编写了简化测试逻辑:通过循环生成仅含ID字段的JSON对象,ID取值为循环变量i,测试代码如下:
json_Daten2 = [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}]
for i in range(10):
    json_Daten2[i] = """
    {
        "ID": i,
    }
    """

运行后得到的输出结果如下:

[
    "\n    {\n        \"ID\": i,\n    }\n    ",
    "\n    {\n        \"ID\": i,\n    }\n    ",
    "\n    {\n        \"ID\": i,\n    }\n    ",
    "\n    {\n        \"ID\": i,\n    }\n    ",
    "\n    {\n        \"ID\": i,\n    }\n    ",
    "\n    {\n        \"ID\": i,\n    }\n    ",
    "\n    {\n        \"ID\": i,\n    }\n    ",
    "\n    {\n        \"ID\": i,\n    }\n    ",
    "\n    {\n        \"ID\": i,\n    }\n    ",
    "\n    {\n        \"ID\": i,\n    }\n    "
]

输出结果均为未解析变量的转义字符串,未生成符合预期的JSON结构。

问题原因

三引号包裹的内容是Python原生字符串,代码运行时不会自动解析字符串内部的变量名i,也不会自动把字符串格式的内容转换成结构化的字典/JSON对象,因此最终存入列表的全是带换行符、转义符的原始文本,既没有替换变量值,也不是合法的结构化JSON数据。

解决方法

核心原则:不要手动拼接JSON字符串,优先构造原生数据结构再做序列化,从根源避免类型错误、格式转义问题。

  1. 推荐方案:先构造Python字典列表,再用标准json库导出文件
    所有数值类型的字段直接赋值对应变量即可,不会被自动转成字符串,构造完成后一次性序列化输出为JSON文件,完全不会出现转义、变量不解析的问题。
    参考代码:
    import json
    
    json_Daten2 = []
    for i in range(10):
        # 直接构造Python字典,不要用字符串包裹
        # temperature、flow、pressure替换为实际存储采集值的变量即可
        record = {
            "ID": i,
            # "temperature": temp_val,
            # "flow": flow_val,
            # "pressure": press_val
        }
        json_Daten2.append(record)
    
    # 验证字段类型:此处输出为<class 'int'>,不会被识别为字符串
    print(type(json_Daten2[0]["ID"]))
    
    # 导出为标准JSON文件
    with open("sensor_data.json", "w", encoding="utf-8") as f:
        json.dump(json_Daten2, f, indent=2, ensure_ascii=False)
    
  2. 不推荐方案:手动拼接字符串后解析
    如果一定要用字符串拼接的方式生成内容,需要用f-string标记解析变量,再通过json.loads()把字符串转换为结构化对象,注意f-string中JSON的大括号需要写双份才能正常转义。
    参考代码:
    import json
    
    json_Daten2 = []
    for i in range(10):
        # 字符串前加f标记启用变量解析,JSON大括号写为{{}}
        record_str = f"""
        {{
            "ID": {i}
        }}
        """
        # 把JSON格式字符串解析为结构化字典
        json_Daten2.append(json.loads(record_str))
    

提示:手动拼接JSON非常容易出现引号不匹配、特殊字符未转义、数值类型错误等问题,非特殊场景不要使用。

内容的提问来源于stack exchange,提问作者MaxPowa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:36:25