首页 > 解决方案 > jmespath 将整个字符串排序为一个

问题描述

我正在尝试对一个数字字段进行排序,但它似乎依次解析每个字符,因此 9“高于”11,但低于 91

有没有办法按整个字符串排序?

示例数据:

{
  "testing": [
    {"name": "01"},
    {"name": "3"},
    {"name": "9"},
    {"name": "91"},
    {"name": "11"},
    {"name": "2"}
  ]
}

询问:

reverse(sort_by(testing, &name))[*].[name]

结果:

  [
    "91"
  ],
  [
    "9"
  ],
  [
    "3"
  ],
  [
    "2"
  ],
  [
    "11"
  ],
  [
    "01"
  ]
]

这可以在http://jmespath.org/尝试

编辑:所以我可以通过管道将其传递给 sort -V 来获得正确的输出,但是没有更简单的方法吗?

标签: aws-clijmespath

解决方案


语境

  • Jmespath 最新版本截至 2020-09-12

用例

  • DevBobDylan 想要对 JSON ArrayOfObject 表中的字符串项进行排序

解决方案

  • 使用 Jmespath 管道运算符将表达式链接在一起

例子

testing|[*].name|sort(@)

截屏

结果使用 Jmespath.org REPL


推荐阅读