繁体   English   中英

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

[英]Retrieving a JSON valid string from a python requests.post()

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

此功能坐在我的本地主机。 上面与保存和检索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时从JSON中的tweet键关联的值。 但是,我继续收到以下错误: AttributeError: 'str' object has no attribute 'get' ,对此我感到困惑,因为从我的理解json.dumps()使用json.dumps()应该创建一个可以调用get的JSON有效字符串。 在与文件之间进行传输时,或者在收到请求时,是否存在编码错误?

任何帮助表示赞赏。

编辑:

这是我使用r.text时来自requests.post的响应示例,响应中似乎还包含一些Unicode,因此在tweet部分的末尾放置了一个示例。 (这也不像JSON,这也是我的问题所围绕的地方。至少应该有双引号,没有U的意思吗?):

{u'tweet': u'RT THIS IS THE TWEET BLAH BLAH\…', u'language': u'en'}

在请求模块中使用.json()以JSON 格式获取响应

例如:

data = r.json()
return data.get('tweet')

注意: json.dumps将您的响应转换为字符串对象

根据评论进行编辑 -尝试使用ast模块。

例如:

import ast
data = ast.literal_eval(r.text)

您将需要使用.json()方法。 请参阅请求的文档: JSON响应内容

另外,供将来参考,而不是做

f.write(json.dumps(jsonFile))

您可以简单地使用:

json.dump(jsonFile, f)

与使用load代替loads

jsonObject = json.load(f)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM