Python 有没有一种方法可以解码具有字符串格式数字的json?

Python 有没有一种方法可以解码具有字符串格式数字的json?,python,json,python-3.x,decode,Python,Json,Python 3.x,Decode,我有一个json文件,其中所有整数和浮点数都表示为字符串: [{“x”:“123.45”,“stuff”:“things”}] 我一直在想,是否有一种简单的方法可以读入并解码到字典中,这样所有的数字字符串都可以转换回数字:{“x”:123.45,“stuff”:“things”} 我以为JSONDecoder应该有这个功能,但我似乎不明白。我试过设置parse\u float=Decimal,但似乎没有任何效果。 如果不创建一个全新的函数,有人有什么想法吗?下面是一个例子,你可以试试 注意:使用

我有一个json文件,其中所有整数和浮点数都表示为字符串:
[{“x”:“123.45”,“stuff”:“things”}]
我一直在想,是否有一种简单的方法可以读入并解码到字典中,这样所有的数字字符串都可以转换回数字:
{“x”:123.45,“stuff”:“things”}
我以为JSONDecoder应该有这个功能,但我似乎不明白。我试过设置
parse\u float=Decimal
,但似乎没有任何效果。
如果不创建一个全新的函数,有人有什么想法吗?

下面是一个例子,你可以试试

注意:使用isdigit()检查其是否为整数

没有isFloat(),因此创建了一个简单的isFloat()函数来检查float

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}

下面是一个示例,您可以尝试

注意:使用isdigit()检查其是否为整数

没有isFloat(),因此创建了一个简单的isFloat()函数来检查float

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}

好的,因为没有更好的选项,并且因为我不想要抛出异常的函数,所以我这样做:

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
[{“x”:“123.45”,“stuff”:“things”}]
并返回
{x':123.45,“stuff':“things”}
好的,由于没有更好的选项,而且因为我不想要抛出异常的函数,所以我这样做了:

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
[{“x”:“123.45”,“stuff”:“things”}]
并返回
{x':123.45,“stuff':“things”}

没有一个json解码器可以知道哪些字符串应该是浮点数,哪些应该是字符串。您必须显式地将您知道应该是浮动的特定键强制转换为您自己的浮动。@deceze,哦,这可能是可以接受的,因为这些键应该总是相同的。你介意发布一个答案,并说明如何做到这一点吗?在何处指定始终为浮点或整数的键列表?或者你的意思是想用一个单独的函数来实现这一点?看看这个问题:我想你需要的是json。加载(c,object_hook=_decode)没有json解码器可以知道哪些字符串应该是浮点数,哪些应该是字符串。您必须显式地将您知道应该是浮动的特定键强制转换为您自己的浮动。@deceze,哦,这可能是可以接受的,因为这些键应该总是相同的。你介意发布一个答案,并说明如何做到这一点吗?在何处指定始终为浮点或整数的键列表?或者你的意思是想制作一个单独的函数来实现这一点?看看这个问题:我想你需要的是json.loads(c,object\u hook=\u decode)