【发布时间】:2019-07-23 05:26:58
【问题描述】:
是否可以使用json_query 完成类似的操作?经过大量搜索后,我找不到任何东西(json_query 和jmespath 都没有)。我能找到的所有东西都假设dict/json 的结构是已知的(即搜索键的深度是已知的)。
示例 JSON 输入:
{
"changed": false,
"msg": {
"Data": {
"Message": "returned status code doesn't match with the expected success code",
"Status": "Failed",
"StatusCode": 409
},
"Message": "none",
"Status": "Failed",
"StatusCode": 409,
"error": {
"error": {
"@Message.ExtendedInfo": [
{
"Message": "Server is already powered OFF.",
"MessageArgs": [
],
"MessageArgs@odata.count": 0,
"MessageId": "IDRAC.1.6.PSU502",
"RelatedProperties": [
],
"RelatedProperties@odata.count": 0,
"Resolution": "No response action is required.",
"Severity": "Informational"
}
],
"code": "Base.1.0.GeneralError",
"message": "A general error has occurred. See ExtendedInfo for more information"
}
},
"retval": true
}
}
我想检查一个键 Message 是否存在值 Server is already power OFF. 而不假设 JSON 的键/结构的深度。
【问题讨论】:
-
我不太明白,你想检查消息是否得到这个值:“服务器已关闭电源”而不输入?因此,如果我们将您的 JSON 视为一条消息并且您有一个消息列表,那么如果我们将
@视为您的当前节点,您可以这样做@[?msg.error.error."@Message.ExtendedInfo"[0].Message == 'Server is already powered OFF.'] -
@bosskay972 我正在寻找一个不包含任何关于输入结构的假设的解决方案(除了 也许 有一个名为 'msg 的顶级键')。最后,我找到了一个不使用 json_query 的答案,但至少仍然坚持内置的 ansible 过滤器/功能(请参阅下面的答案)。
标签: ansible ansible-2.x jmespath json-query