Python 我需要打印匹配字符串后面的内容
我正在为我和我的朋友构建一个slack机器人,在这个过程中,我使用了uptimerobot和slack API。我的问题是,我无法确定如何仅从uptimerobot API的返回消息中打印某些值。下面是代码现在的样子: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
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响应,而不是解析stdoutresponse.JSON['monitors'][0]['friendly_name']
@wilkesybear我也这么认为,直接在脚本中解析JSON响应并获得我想要的结果是明智的。我是新手,不知道如何前进。你知道吗?@jordanm谢谢你的回复,但我不知道该怎么理解。我应该把它添加到我的脚本中吗?对不起,它应该是reponse.json()['monitors'][0]['friendly\u name']
。requests-response对象上的json()
方法将解析后的json作为dict返回。其余的只访问您正在查找的元素。