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

时间:2017-09-09 12:44:57

标签: jmespath

我正在尝试找到所有具有2个内核的虚拟机:

$ 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起诉分享商业机密或其他东西)

1 个答案:

答案 0 :(得分:2)

您的JMESPath查询是正确的,但是构建自制版public class DateWithAttributes { public string Date {get;set;} public Attribute Attribute1 {get;set;} public Attribute Attribute2 {get;set;} ... } List<DateWithAttributes> DateWithAttributesList = new List<DateWithAttributes>() { DateWithAttribute1, DateWithAttribute2 } List<DateWithAttributes> sortedDateList = DateWithAttributesList.OrderBy(x => x.date).ToList(); 的方式存在问题(它使用过时的脚本来构建jp二进制文件)。现在,自制安装的jp版本将始终使用https://github.com/jmespath/jp/releases中已签名的发布二进制文件。每次提交都会测试这些二进制文件。如果您不使用自制软件,您应该可以jp或使用https://github.com/jmespath/jp/releases中的二进制文件。