gpt4 book ai didi

shell - 如何处理 JMESPath 包含可能为空的属性的过滤器?

转载 作者:行者123 更新时间:2023-12-03 15:47:04 28 4
gpt4 key购买 nike

我想过滤 Azure CloudShell 命令 az ad sp list 的输出它输出一个 JSON 数组,例如通过过滤到 Publisher Name =“ACME”。所有 az 命令都支持 --query 参数,该参数接受 JMESPath 表达式。

我有一个 JMESPath 过滤器:

az ad sp list --query "[?contains(publisherName,'ACME')]" --all

失败并出现错误:

In function contains(), invalid type for value: None, expected one of: ['array', 'string'], received: "null"

我对 JMESPath 语法充满信心,因为非常相似的表达式可以正常工作:

az ad sp list --query "[?contains(displayName,'ACME')]" --all

我有一个工作正常的空过滤器:

az ad sp list --query "[?publisherName!='null']" --all

但是当我将 null 过滤器与 contains 过滤器组合时,我仍然收到错误:

az ad sp list --query "[?publisherName!='null' && contains(publisherName,'ACME')]" --all

我猜测 JMESPath 过滤器不支持 boolean operations short circuit 。然而我在http://jmespath.org/上没有找到任何关于此的声明。或通过谷歌搜索。

我不知道如何使用 Azure az 命令 --query 子句进行菊花链或管道连接以分别应用两个筛选器。

有什么建议如何实现我的过滤输出吗?

最佳答案

上下文

  • MSFT azure cloud shell 控制台(截至 2019 年 11 月 17 日)
  • 带有 jmespath 查询的 azure cloud shell az 命令
  • jmespath 处理过滤表达式中可能为空的值

用例

  • UserJohnCDeveloper想要对可能为 null 的属性运行 JMESPath 过滤器
  • 如何使用 Azure az 命令 --query 子句进行菊花链或管道

解决方案

  • Jmespath 支持pipe expressions
  • Jmespath 支持通过使用管道表达式将一个表达式的结果传递到另一个表达式。这可以通过将多个子表达式和过滤器链接在一起来实现任意复杂度的查询。

示例

 --query "[? publisherName!=null]|[? contains(publisherName,'ACME')]" --all

关于shell - 如何处理 JMESPath 包含可能为空的属性的过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55303239/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com