【问题标题】:Using jq to sort keys then values in json使用 jq 对 json 中的键和值进行排序
【发布时间】:2019-07-07 19:08:37
【问题描述】:

有人知道如何使用 jq 对 json 中的键及其数组值进行排序吗?

例如:

排序前:

{ 
   z:["c","b","a"],
   y:["e", "d", "f"],
   x:["g", "i", "h"]
}

排序后:

{
   x:["h", "i", "j"]
   y:["d", "e", "f"],
   z:["a","b","c"]
}

我正在尝试使用

jq --sort-keys 

但它只对键进行排序,而不包括它们的值。

谢谢!

【问题讨论】:

    标签: json sorting key jq


    【解决方案1】:

    如果您愿意依靠 --sort-keys 命令行选项对键进行排序,那么您可以通过以下方式确保所有数组都已排序:

    walk(if type=="array" then sort else . end)
    

    如果您希望在内部对对象键进行排序(即在生成最终输出之前),那么您可以使用以下过滤器来扩充上述内容:

    walk(if type=="array" then sort
         elif type == "object" then to_entries | sort | from_entries
         else . end)
    

    替代方案

    如果出于某种原因您不想使用walk,那么您可以使用sort(用于JSON 数组)和to_entries|sort|from_entries(用于JSON 对象)的某种组合来推出您自己的解决方案。

    【讨论】:

      猜你喜欢
      • 2021-07-26
      • 2015-07-31
      • 1970-01-01
      • 2017-08-29
      • 2020-03-06
      • 2021-04-03
      • 2019-06-06
      • 2012-07-02
      • 2021-11-20
      相关资源
      最近更新 更多