我有一个json文件,其中所有整数和浮点数都表示为字符串:
[{"x": "123.45", "stuff": "things"}]
我一直在尝试找出是否有一种简单的方法可以将其读入并解码成字典,从而将所有数字字符串都转换回数字:{"x": 123.45, "stuff": "things"}
我以为JSONDecoder应该具有此功能,但我似乎无法弄清楚。我尝试设置parse_float=Decimal
,但这似乎没有任何作用。
没有人有任何想法而没有创建一个全新的功能吗?
答案 0 :(得分:0)
下面是一个示例,您可以尝试
注意:使用isdigit()检查其整数。
没有isFloat(),因此创建了一个简单的isFloat()函数来检查浮点数
def isFloat(string):
try:
float(string)
return True
except ValueError:
return False
example = {"x":"123.45",
"y":"120"}
for key, value in example.items():
if value.isdigit():
example[key]=int(value)
elif isFloat(value):
example[key]=float(value)
print (example)
输出:{'x':123.45,'y':120}
答案 1 :(得分:0)
好吧,由于缺少更好的选择,并且因为我不希望引发异常的函数,所以我要做的是:
def change_type(file):
def to_num(match):
return ast.literal_eval(match.group())
data = open(file).read()[1:-1]
p = re.compile(r'\"([-+]?\d*\.\d+|\d+)\"')
data_json = loads(p.sub(to_num, data))
return data_json
这将在json中所有可能的字符串值中找到所有浮点数和整数,并仅转换那些保留所有其他形式的字符串。 如果有人有更好的建议,请告诉我。
接收test.json
的{{1}}并返回[{"x": "123.45", "stuff": "things"}]
。