将属性与数字文字进行比较

Compare attribute with number literal

我正在尝试查找恰好具有 2 个内核的所有 VM:

$ az vm list-sizes -o json --query "[?numberOfCores == 2]"
az vm list-sizes: error: argument --query: invalid query value: '[?numberOfCores == 2]'

因为我怀疑是az命令出错,所以我安装了jp directly,但是也报错:

$ az vm list-sizes -o json | jp "[?numberOfCores == 2]"
SyntaxError: Invalid token: tNumber
[?numberOfCores == 2]

the jmespath specification 中,看起来我必须使用反引号 ` 字符,但它没有给出错误而是没有结果:

$ az vm list-sizes -o json | jp '[?numberOfCores == `2`]'
[]

这是(缩写)返回的 json 我正在尝试过滤:

$ az vm list-sizes -o json | head -n 20
[
  {
    "maxDataDiskCount": 4,
    "memoryInMb": 123,
    "name": "Standard_DS1",
    "numberOfCores": 1,
    "osDiskSizeInMb": 456,
    "resourceDiskSizeInMb": 789
  },
  {
    "maxDataDiskCount": 8,
    "memoryInMb": 123,
    "name": "Standard_DS2",
    "numberOfCores": 2,
    "osDiskSizeInMb": 456,
    "resourceDiskSizeInMb": 789
  }
]

(我混淆了大小,因为我不想被 MS 起诉共享商业机密或其他东西)

您的 JMESPath 查询是正确的,但是 jp 的自制版本的构建方式存在问题(它使用过时的脚本来构建 jp 二进制文件)。现在,如果您不使用自制软件,jp 的自制软件安装版本将始终使用来自 https://github.com/jmespath/jp/releases. These binaries are tested on every commit. You should be able to brew update && brew upgrade jp, or use a binary from https://github.com/jmespath/jp/releases 的已签名发布二进制文件。

在我的例子中,我在执行 office365 cli 命令时使用 双引号 和 --query 标志,与 @user3151902 正在使用 .

注意:: 双引号适用于字符串值,但会引发数字值错误。

错误的方式::

m365 spo list list -o json --query "[?BaseTemplate==`100`]" -u https://{contoso}.sharepoint.com/sites/{siteName}

正道::

m365 spo list list -o json --query '[?BaseTemplate==`100`]' -u https://{contoso}.sharepoint.com/sites/{siteName}