微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果值存在,我怎样才能让 jmespath 过滤器返回 true,如果不存在则返回 falsepython

如何解决如果值存在,我怎样才能让 jmespath 过滤器返回 true,如果不存在则返回 falsepython

这是上一个解决问题的扩展,但另一种看待问题的方式HERE

{
  "name": "Sarah","region": "south west","age": 21,"occupation": "teacher","height": 145,"education": "university","favouriteMovie": "matrix","gender": "female","country": "US","level": "medium","tags": [],"data": "abc","moreData": "xyz","logging" : {
    "systemLogging" : [ {
      "environment" : "test","example" : [ "this","is","an","example","array" ]
    } ]
  }
}

如果我想查看 Python 字典中是否存在简单键值对的值,我可以使用 jmespath 查询来执行此操作

"occupation == `teacher`"
>> True
"occupation == `dancer`"
>> False

但是对于更复杂的数据,例如带有列表/数组的嵌套字典,我能做的最好的事情就是过滤以获取

"logging.systemLogging[?environment == `test`] | [0].enabled"
>> test
"logging.systemLogging[?environment == `prod`] | [0].enabled"
>> None

如何让上面的示例返回 TrueFalse 而不是值(如果存在)和 None 或空数组 [](如果不存在)

解决方法

好吧,你完全可以这样做:

logging.systemLogging[?environment == `test`] | [0].enabled != null

开启

{
    "name": "Sarah","region": "south west","age": 21,"occupation": "teacher","height": 145,"education": "university","favouriteMovie": "matrix","gender": "female","country": "US","level": "medium","tags": [],"data": "abc","moreData": "xyz","logging": {
        "systemLogging": [{
            "environment": "test","example": ["this","is","an","example","array"]
        }]
    }
}

会导致

false

虽然在这个 JSON 上也是如此——其中添加了 logging.systemLogging[0].enabled: false

{
    "name": "Sarah","logging": {
        "systemLogging": [{
            "enabled": false,"environment": "test","array"]
        }]
    }
}

会导致

true

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。