Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python requests.post()中检索JSON有效字符串_Python_Json_Python Requests - Fatal编程技术网

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

从python requests.post()中检索JSON有效字符串,python,json,python-requests,Python,Json,Python Requests,在尝试了一些可能的解决方案后,我感到非常困惑,并且出现了各种各样的错误,这些错误只会让我陷入困境。我有一个函数,可以抓取一条tweet,将其放入字典,然后使用dumps将字典写入文件,如下所示: jsonFile = {} jsonFile["tweet"] = tweet jsonFile["language"] = language with open('jsonOutputfile.txt', 'w') as f: json.dump(jsonFile, f) 然后我有另一个p

在尝试了一些可能的解决方案后,我感到非常困惑,并且出现了各种各样的错误,这些错误只会让我陷入困境。我有一个函数,可以抓取一条tweet,将其放入字典,然后使用
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")
在抓取tweet之后,我想对它进行操作,我想使用我应该从这个请求中收到的JSON进行操作

r = grab_tweet()
data = json.dumps(r.text)
return data.get('tweet')
我希望上面的函数只返回与保存和加载JSON中的
tweet
键相关联的值。但是,我不断遇到以下错误:
AttributeError:'str'对象没有属性“get”
,我对此感到困惑,因为根据我的理解,使用
json.dumps()
应该创建一个json有效字符串,我可以调用get on。当我将此文件传输到文件或从文件传输时,或者当我收到请求时,是否存在编码错误

感谢您的帮助

编辑:

data = r.json()
return data.get('tweet')
import ast
data = ast.literal_eval(r.text)
这是我的
请求的一个响应示例。post
当我使用
r.text
时,响应中似乎也有一些Unicode,因此我在tweet部分的末尾给出了一个示例。(这看起来也不像JSON,这正是我的问题的中心。至少应该有双引号,没有U的权利?)

{u'tweet':u'RT这是tweet BLAH BLAH\u2026',u'language':u'en'}

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

Ex:

data = r.json()
return data.get('tweet')
import ast
data = ast.literal_eval(r.text)
注意:json.dumps将您的响应转换为字符串对象

按注释编辑-尝试使用ast模块

Ex:

data = r.json()
return data.get('tweet')
import ast
data = ast.literal_eval(r.text)

您需要使用
.json()
方法。见请求文件:

还有,供以后参考,而不是做

f.write(json.dumps(jsonFile))

您可以简单地使用:

json.dump(jsonFile,f)

与使用
加载
而不是
加载
相同:


jsonObject=json.load(f)

usong
r.json()
我收到了这个错误:
simplejson.errors.JSONDecodeError:应该是包含在双引号中的属性名:第1行第3列(char 2)
你能发布你的响应样本吗?是的,发布了一个我的响应样本,看起来像是一个编辑更新的代码片段。您可以尝试使用
ast
模块吗?
data
data=ast.literal\u eval(r.text)
之后的词典,现在您可以执行
data.get('tweet')
,而无需获取error@cjnash您发布的位不是有效的JSON。你是怎么得到的?字符串应该使用“”而不是u“”。我使用问题中概述的函数得到它。我知道它不是有效的JSON,这是我的问题。我创建了一个字典,将它转储到一个文件中,然后加载它。所以在这个过程中的某个地方,它正在被转换。@cjnash如果您的网关返回JSON,那么使用
.JSON()
,而不是
.text
r=grab\u tweet()
r.JSON()['tweet']
这样做很不幸会引发以下错误:
ValueError:需要包含在双引号中的属性名:第1行第2列(char 1)
。我非常确定我必须使用ast.literal_eval(),正如Rakesh指出的那样。谢谢你的帮助@cjnash为什么不修复网关以返回有效的JSON呢?