如何将整数字符串转换为整数?

时间:2019-11-28 07:43:03

标签: python json

import json
class Decoder(json.JSONDecoder):
     def decode(self, s):
         result = super(Decoder, self).decode(s)
        return self._decode(result)
     def _decode(self, o):
         if isinstance(o, str) or isinstance(o, unicode):
             try:
                 return int(o)
             except ValueError:
                 try:
                    return float(o)
                 except ValueError:
                     return o
         elif isinstance(o, dict):
             return {k: self._decode(v) for k, v in o.items()}
         elif isinstance(o, list):
             return [self._decode(v) for v in o]
         else:
             return o
With open('data.json') as f:
data = json.loads(f,cls=Decoder)


**Error code is:**
    Traceback (most recent call last):
  File "\\Program:(c)\Folder\sample\pyhton\sample.py", line 29, in <module>
    data = json.loads(f,cls=Decoder)
  File "C:\Program Files (x86)\Python36-32\lib\json\__init__.py", line 348, in loads
    'not {!r}'.format(s.__class__.__name__))
TypeError: the JSON object must be str, bytes or bytearray, not 'TextIOWrapper'

Python版本:3.6.4

如何解决此错误?

我正在尝试使用类将字符串整数转换为整数。

关于, 斯里拉姆

1 个答案:

答案 0 :(得分:1)

json.loads用于加载json字符串

  

使用此转换表将s(包含JSON文档的str,字节或字节数组实例)反序列化为Python对象。 (https://docs.python.org/3/library/json.html#json.loads

要加载json文件,您需要data = json.load(f,cls=Decoder)(注意缺少的)。

  

使用此转换表将fp(支持.read()的文本文件或包含JSON文档的二进制文件)反序列化为Python对象。 (https://docs.python.org/3/library/json.html#json.load

对于您而言,您甚至不需要自定义解码器,因为json模块将自动为您转换浮点数和整数:

>>> import json
>>> json.loads('{"a": 0.254}')
{'a': 0.254}

所以这样做就足够了:

data = json.load(f)