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
如何解决此错误?
我正在尝试使用类将字符串整数转换为整数。
关于, 斯里拉姆
答案 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)