在Python中,我得到一个错误:

Exception:  (<type 'exceptions.AttributeError'>,
AttributeError("'str' object has no attribute 'read'",), <traceback object at 0x1543ab8>)

给定python代码:

def getEntries (self, sub):
    url = 'http://www.reddit.com/'
    if (sub != ''):
        url += 'r/' + sub
    
    request = urllib2.Request (url + 
        '.json', None, {'User-Agent' : 'Reddit desktop client by /user/RobinJ1995/'})
    response = urllib2.urlopen (request)
    jsonStr = response.read()
    
    return json.load(jsonStr)['data']['children']

这个错误是什么意思,我做了什么导致它?


当前回答

好吧,这是一个旧的帖子,但是。 我也有同样的问题,我的问题是我使用了json。Load而不是json.loads

这样,json加载任何类型的字典都没有问题。

官方文档

json。load -使用此转换表将fp(支持.read()的文本文件或包含JSON文档的二进制文件)反序列化为Python对象。 json。loads -使用此转换表将s(包含JSON文档的str, bytes或bytearray实例)反序列化为Python对象。

其他回答

所以,不要使用json.load(data.read()),而是使用json.loads(data.read()):

def findMailOfDev(fileName):
    file=open(fileName,'r')
    data=file.read();
    data=json.loads(data)
    return data['mail']

如果你需要将字符串转换为json。然后使用loads()方法代替load()。Load()函数用于从文件中加载数据,因此使用Load()将字符串转换为json对象。

j_obj = json.loads('["label" : "data"]')

你需要先打开文件。这行不通:

json_file = json.load('test.json')

但这是可行的:

f = open('test.json')
json_file = json.load(f)

而不是json.load()使用json.loads(),它将工作: 例:

import json
from json import dumps

strinjJson = '{"event_type": "affected_element_added"}'
data = json.loads(strinjJson)
print(data)

好吧,这是一个旧的帖子,但是。 我也有同样的问题,我的问题是我使用了json。Load而不是json.loads

这样,json加载任何类型的字典都没有问题。

官方文档

json。load -使用此转换表将fp(支持.read()的文本文件或包含JSON文档的二进制文件)反序列化为Python对象。 json。loads -使用此转换表将s(包含JSON文档的str, bytes或bytearray实例)反序列化为Python对象。