在尝试了一些可能的解决方案并获得各种错误之后,我感到非常困惑。我有一个函数,它将获取一条推文,将其放入字典中,然后使用dumps
将该字典写入文件,如下所示:
jsonFile = {}
jsonFile["tweet"] = tweet
jsonFile["language"] = language
with open('jsonOutputfile.txt', 'w') as f:
json.dump(jsonFile, f)
然后我有另一个python文件,如果我想在其他地方使用它,那么该函数将返回此jsonOutputfile.txt
的值。我这样做是这样的:
with open('jsonOutputfile.txt') as f:
jsonObject = json.load(f)
return jsonObject
此功能位于我的localhost上。以上两个与保存和检索JSON文件有关的函数与我下面的其他函数是分开的,正如我希望的那样。
我有另一个函数将使用python请求检索返回状态的值,如下所示:
def grab_tweet():
return requests.post("http://gateway:8080/function/twittersend")
然后在抓取推文后我想操纵它,我想使用我应该从这个请求收到的JSON这样做。
r = grab_tweet()
data = json.dumps(r.text)
return data.get('tweet')
我希望上面的这个函数只返回与我保存和加载时收到的JSON中tweet
键关联的值。但是,我继续收到以下错误:AttributeError: 'str' object has no attribute 'get'
我很困惑,因为根据我对json.dumps()
的理解应该创建一个我可以调用的JSON有效字符串。当我将文件传输到文件或从文件传输时,或者当我收到我的请求时,是否存在编码错误?
感谢任何帮助。
修改
以下是我requests.post
使用r.text
时的响应示例,看起来响应中还有一些Unicode,所以我在推文部分的末尾添加了一个示例。 (这看起来也不像是我的问题所围绕的JSON。至少应该是双引号而且没有U的权利?):
{u'tweet': u'RT THIS IS THE TWEET BLAH BLAH\u2026', u'language': u'en'}
答案 0 :(得分:2)
在请求模块中使用 .json() 以响应为JSON
<强>实施例强>
data = r.json()
return data.get('tweet')
注意: json.dumps 将您的回复转换为字符串对象
根据评论进行编辑 - 尝试使用ast模块。
<强>实施例强>
import ast
data = ast.literal_eval(r.text)
答案 1 :(得分:0)
您需要使用.json()
方法。查看请求&#39;文档:JSON Response Content
另外,为了将来参考,而不是
f.write(json.dumps(jsonFile))
你可以简单地使用:
json.dump(jsonFile, f)
与使用load
代替loads
相同:
jsonObject = json.load(f)