json - 如何从 Ansible 中由正斜杠分隔的字符串中获取特定值
问题描述
在 ansible playbook 中,我定义了变量“datasetInfo”,其中存储了以下值
"metadata": {
"@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateDatasetOperationMetadata",
"genericMetadata": {
"createTime": "2021-10-21T19:44:36.212910Z",
"updateTime": "2021-10-21T19:44:36.212910Z"
}
},
"name": "projects/93057109696/locations/us-central1/datasets/4110898054394019840/operations/6109567339060002816"
}
}
现在我正在尝试从字符串中检索特定值。我想检索“名称”对象内的“4110898054394019840”我正在托盘中运行它在我的剧本中但没有得到答案
- name: datset id
debug :
msg : "{{ datasetInfo.json.name.split('/') | tail -n 1 }}"
提前致谢。
解决方案
因此,除了@frederic-henri几乎正确的评论之外,我还想提供一个竞争理论来说明如何提取那段文本
- debug:
msg: >-
{{ datasetInfo.json.name
| regex_findall('.*/datasets/([0-9]+)/.*')
| first }}
输出
ok: [localhost] => {
"msg": "4110898054394019840"
}
但是我想提供这种使用数组下标的替代方法的原因是split('/')[4]
,它假设它是第 5 个斜线分隔的项目,通过使用regex_findall
它为读者提供了一些关于字符串应该是什么形状的上下文,以及我们的部分关心。这也意味着,如果由于无法控制的原因,谷歌要更改该name
字段,它将导致剧本立即停止并出现错误,而不是抓住恰好位于第 5 个斜线分隔位置的任何内容,然后也许只有稍后才会出现一些下游错误实现。
最后,正如通过实际运行Frederic 的评论所看到的那样,有时进行斜线计数并不能摆脱,因为split('/')[4]
实际上是datasets
,而不是数字(数字是[5]
的split
)
推荐阅读
- python-3.x - 比较 sqlite 和 list 之间的输出
- javascript - 在javascript中为数组的每个项目添加一个字符串前缀
- android - 如何将 Fragment 传递给 Activity
- java - 如何在启用按钮的同时进行倒计时显示/开始?
- android - 应用程序可以在 Application.onCreate() 之前获取 Fragment.onAttached() 吗?
- python - Python:将数据添加到列表
- javascript - 引用的对象和虚拟 getter 在 pug 布局文件中返回未定义,但从数据库中成功查询
- lua - 机器人 | 我如何制作它,以便您单击一个 TextButton,然后它会在 Trello 上创建一张卡片?
- python - 如何使 USB 摄像头与 OpenCV 一起使用?
- javascript - Chrome DevTools 不断刷新页面