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字符串,优先构造原生数据结构再做序列化,从根源避免类型错误、格式转义问题。
- 推荐方案:先构造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) - 不推荐方案:手动拼接字符串后解析
如果一定要用字符串拼接的方式生成内容,需要用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
相关产品推荐
相关产品推荐

