我怎么做的json.loads把str变成in

2024-10-03 13:16:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要-40'到-40输出,我怎么能做到这一点?在

In [2]: foo
Out[2]: '{\n\t"rssiIntentRange":"-40"\n}'

In [3]: import json

In [4]: json.loads(foo)
Out[4]: {u'rssiIntentRange': u'-40'}

我正在寻找一些干净和通用的东西。做治疗后json.loads是我已经在做的事情,它非常肮脏,因为所有类型的数据和索引。如果json.loads对于处理JSON的其他方法,im不是最好的选择吗


Tags: 数据方法inimportjson类型fooout
2条回答

如果要影响调用json.loads()时发生的情况,则需要编写一个对象钩子:

import json


def int_please_object_hook(obj):
    """If a value in obj is a string, try to convert it to an int"""
    rv = {}
    for k, v in obj.items():
        if isinstance(v, basestring):
            try:
                rv[k] = int(v)
            except ValueError:
                rv[k] = v
        else:
            rv[k] = v
    return rv


j = '{"key1": "value1", "key2": "10", "key3": "-10"}'

print(json.loads(j))
# {'key1': 'value1', 'key2': '10', 'key3': '-10'}

print(json.loads(j, object_hook=int_please_object_hook))
# {'key1': 'value1', 'key2': 10, 'key3': -10}

一种方法是在加载json之后将-40字符串转换为int。在

示例-

>>> foo = '{\n\t"rssiIntentRange":"-40"\n}'
>>> import json
>>> d = json.loads(foo)
>>> d['rssiIntentRange'] = int(d['rssiIntentRange'])
>>> d
{'rssiIntentRange': -40}

要更改加载的字典中的所有此类值,可以执行以下操作-

^{pr2}$

示例/演示-

>>> foo = '{\n\t"rssiIntentRange":"-40",\n\t"blah":"abcd",\n\t"anothernumber":"-10"\n}'
>>> d = json.loads(foo)
>>> for k,v in d.items():
...     try:
...         d[k] = int(v)
...     except (ValueError, TypeError):
...         pass
...
>>> d
{'blah': 'abcd', 'anothernumber': -10, 'rssiIntentRange': -40}

相关问题 更多 >