Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
输出包含排序内容的整个JSON文档_Json_Sorting_Jq_Jmespath - Fatal编程技术网

输出包含排序内容的整个JSON文档

输出包含排序内容的整个JSON文档,json,sorting,jq,jmespath,Json,Sorting,Jq,Jmespath,是否可以对json文档的特定数组进行排序,并输出整个文档,其中包含排序后的内容,否则将不被触及 例如,如果我有这样的东西: { "Version": "2012-10-17", "Statement": [ { "Sid": "BLAHBLAHBLAH", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::346654243625:root",

是否可以对json文档的特定数组进行排序,并输出整个文档,其中包含排序后的内容,否则将不被触及

例如,如果我有这样的东西:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "BLAHBLAHBLAH",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::346654243625:root",
          "arn:aws:iam::984895836564:root",
          "arn:aws:iam::636877599363:root",
          "arn:aws:iam::577836285792:root",
          "arn:aws:iam::836666644595:root",
          "arn:aws:iam::652379234777:root",
          "arn:aws:iam::339659563489:root",
          "arn:aws:iam::293576423935:root",
          "arn:aws:iam::682354689262:root",
          "arn:aws:iam::349855857558:root",
          "arn:aws:iam::398259495958:root",
          "arn:aws:iam::735277384553:root"
        ]
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::blah-blah-blah",
        "arn:aws:s3:::blah-blah-blah/*"
      ]
    }
  ]
}
我想拿回这个:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "BLAHBLAHBLAH",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::293576423935:root",
          "arn:aws:iam::339659563489:root",
          "arn:aws:iam::346654243625:root",
          "arn:aws:iam::349855857558:root",
          "arn:aws:iam::398259495958:root",
          "arn:aws:iam::577836285792:root",
          "arn:aws:iam::636877599363:root",
          "arn:aws:iam::652379234777:root",
          "arn:aws:iam::682354689262:root",
          "arn:aws:iam::735277384553:root",
          "arn:aws:iam::836666644595:root",
          "arn:aws:iam::984895836564:root"
        ]
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::blah-blah-blah",
        "arn:aws:s3:::blah-blah-blah/*"
      ]
    }
  ]
}
我看到过使用
jq
JMESPath
进行排序的示例,但只看到它们输出被排序的部分,而没有输出带有排序部分的整个文档。正在寻求有关这一问题的指导,并将对任何有效的解决方案感到满意


这就是我用来排序数组
|jq'.Statement[].Principal.AWS | sort'
的方法,它是有效的,但我想回到整个文档的上下文中,它的格式是一样的。

对于jq处理器来说,这是一项很好的工作:

jq '.Statement[0].Principal.AWS |= sort' file
  • .Statement[0].Principal.AWS
    -所选项目

  • |=
    -更新语句/操作(更新所选项目)


输出:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "BLAHBLAHBLAH",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::293576423935:root",
          "arn:aws:iam::339659563489:root",
          "arn:aws:iam::346654243625:root",
          "arn:aws:iam::349855857558:root",
          "arn:aws:iam::398259495958:root",
          "arn:aws:iam::577836285792:root",
          "arn:aws:iam::636877599363:root",
          "arn:aws:iam::652379234777:root",
          "arn:aws:iam::682354689262:root",
          "arn:aws:iam::735277384553:root",
          "arn:aws:iam::836666644595:root",
          "arn:aws:iam::984895836564:root"
        ]
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::blah-blah-blah",
        "arn:aws:s3:::blah-blah-blah/*"
      ]
    }
  ]
}

要对多个阵列进行排序,请使用:

jq '.Statement[].Principal.AWS |= sort' file

好极了这确实有效,你愿意把它分解并解释它是如何实现的吗?@Trytry再次,当然,请参阅我的解释两条评论:1。您不必将其限制在第一条语句中,您可以将其保留为
.statement[].Principal…
,2。当不需要排序时,初始的
可以是
排序
.Statement[].Principal.AWS |=sort
@trytryreach:这里的关键是,因为这里应用的过滤器是一个赋值,所以它不会更改上下文。因此,我们不是将范围缩小到每个语句的单个
AWS
属性,然后进行排序,而是选择单个AWS属性并通过排序进行更新。@JeffMercado…很有意义,我总是喜欢额外的解释,喜欢能够删掉任何不必要的内容。确认和高兴:)谢谢