如何移除JSON文件中数值类型值的双引号?
解决JSON数值字段带双引号的问题
问题说明
生成的JSON文件中,lat、lon、aoe字段的值被当作字符串(带双引号)存储,而实际需要它们是不带引号的数值类型,以便folium库正确处理点位数据。
方法一:修改初始生成代码(推荐)
问题根源是原代码直接将文本分割后的字符串赋值给字典,导致json.dump将其序列化为字符串。只需在赋值时把字符串转为数值类型即可:
import json filename = 'Lat_Lon_Time.txt' dict1 = [] fields =['lat','lon','aoe'] with open(filename) as fh: for line in fh: # 分割每行数据,取前3个字段对应lat、lon、aoe description = line.strip().split(None, 4)[:3] dict2 = {} for field, value in zip(fields, description): # 将字符串转为浮点型数值 dict2[field] = float(value) dict1.append(dict2) with open("test2.json", "w") as out_file: json.dump(dict1, out_file, indent=4)
关键修改点
- 用
float(value)将分割得到的字符串转为数值类型,json模块会自动识别并输出不带引号的数值。 - 用
zip(fields, description)替代原有的while循环,代码更简洁易读。
方法二:事后修复现有JSON文件
如果已经生成了带引号的JSON文件,可以通过解析后转换类型再重新写入:
import json # 读取原JSON文件 with open("test2.json", "r") as f: data = json.load(f) # 遍历每条数据,转换字段类型 for item in data: item['lat'] = float(item['lat']) item['lon'] = float(item['lon']) item['aoe'] = float(item['aoe']) # 写入修复后的JSON文件 with open("test2_fixed.json", "w") as f: json.dump(data, f, indent=4)
备选:正则表达式替换(慎用)
如果不想解析JSON,也可以用正则替换数值的引号,但注意仅当所有带引号的数字都是需要转换的字段时使用,避免误改其他字符串字段:
import re with open("test2.json", "r") as f: content = f.read() # 匹配并替换所有带引号的数值 fixed_content = re.sub(r'"(-?\d+\.?\d*)"', r'\1', content) with open("test2_fixed.json", "w") as f: f.write(fixed_content)
内容的提问来源于stack exchange,提问作者henri
相关产品推荐
相关产品推荐

