从python requests.post()中检索JSON有效字符串

时间:2018-05-22 13:14:06

标签: python json python-requests

在尝试了一些可能的解决方案并获得各种错误之后,我感到非常困惑。我有一个函数,它将获取一条推文,将其放入字典中,然后使用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'}

2 个答案:

答案 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)