Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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 我需要打印匹配字符串后面的内容_Python_Api_Awk - Fatal编程技术网

Python 我需要打印匹配字符串后面的内容

Python 我需要打印匹配字符串后面的内容,python,api,awk,Python,Api,Awk,我正在为我和我的朋友构建一个slack机器人,在这个过程中,我使用了uptimerobot和slack API。我的问题是,我无法确定如何仅从uptimerobot API的返回消息中打印某些值。下面是代码现在的样子: import requests #from subprocess import call #UPTIMEROBOT url = "https://api.uptimerobot.com/v2/getMonitors" payload = "api_key=apikeyher

我正在为我和我的朋友构建一个slack机器人,在这个过程中,我使用了uptimerobot和slack API。我的问题是,我无法确定如何仅从uptimerobot API的返回消息中打印某些值。下面是代码现在的样子:

import requests
#from subprocess import call


#UPTIMEROBOT
url = "https://api.uptimerobot.com/v2/getMonitors"

payload = "api_key=apikeyhere&format=json&all_time_uptime_ratio=1"
headers = {
    'content-type': "application/x-www-form-urlencoded",
    'cache-control': "no-cache"
    }

response = requests.request("POST", url, data=payload, headers=headers)
如果我运行脚本,我会得到以下输出(省略了一些):

我现在所做的只是运行脚本并将其导入awk,如下所示:

python3 slackbot.py | awk -F "friendly_name:" {'print $2'}
awk -F "friendly_name\":\"" {'print $2'}
但它根本不返回任何东西。我想得到的只是“名字”,周围没有引号


如果有人能帮助我,那就太好了。

Awk
可能不是最好的解决方案,因为您可以通过将json数据作为对象来更轻松地操作它。使用命令行程序可以很好地工作,比如
jq'.monitors[0].friendly\u name'

基于您的问题使用json对象的工作示例:

echo '{"stat":"ok","pagination":{"offset":0,"limit":50,"total":3},"monitors":[{"id":1,"friendly_name":"name"'}]} | jq '.monitors[0].friendly_name'
awk命令不起作用的原因是,当您需要
友好名称时,您正在按
友好名称:
拆分数据“

如果要添加
“:”
,需要像这样转义双引号:

python3 slackbot.py | awk -F "friendly_name:" {'print $2'}
awk -F "friendly_name\":\"" {'print $2'}

这仍然会给您留下一个额外的
。您可以相当轻松地删除
,但我建议您选择jq路线,因为它更易于维护

我建议你看看jq:。。。它将在您的命令行上解析/切片/过滤JSON。也就是说,最好从py程序中解析JSON响应,而不是解析stdout
response.JSON['monitors'][0]['friendly_name']
@wilkesybear我也这么认为,直接在脚本中解析JSON响应并获得我想要的结果是明智的。我是新手,不知道如何前进。你知道吗?@jordanm谢谢你的回复,但我不知道该怎么理解。我应该把它添加到我的脚本中吗?对不起,它应该是
reponse.json()['monitors'][0]['friendly\u name']
。requests-response对象上的
json()
方法将解析后的json作为dict返回。其余的只访问您正在查找的元素。