首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在jq中按键和键的值对json文件进行排序

如何在jq中按键和键的值对json文件进行排序
EN

Stack Overflow用户
提问于 2015-05-20 00:45:23
回答 2查看 74.7K关注 0票数 94

我们正在使用CTools库构建一个网站,这个库有一个图形化的仪表板编辑器,可以为仪表板的一部分写出JSON格式的文件。

我想在检入到git之前对这些文件进行转换,以便先按键排序,然后再按某些键的值排序。这样做的目的是为了让区分变得更容易,因为编辑器习惯于重新排列所有的json字段。

例如,我们可能有这样的内容:

代码语言:javascript
复制
{
  "components": {
    "rows": [
      {
        "id": "CHARTS",
        "name": "Charts",
        "parent": "UnIqEiD",
        "properties": [
          {
            "name": "Group",
            "type": "Label",
            "value": "Charts"
          }
        ],
        "type": "Label",
        "typeDesc": "<i>Group</i>"
      },
      {
        "id": "kjalajsdjf",
        "meta_cdwSupport": "true",
        "parent": "CHARTS",
        "properties": [
          {
            "name": "name",
            "type": "Id",
            "value": "Value1"
          },
          {
            "name": "title",
            "type": "String",
            "value": "Value2"
          },
          {
            "name": "listeners",
            "type": "Listeners",
            "value": "[]"
          },
...

我们可以使用jq --sort-keys (http://stedolan.github.io/jq/)来对所有键进行排序,但是我正在努力找出如何使用sort_by函数来根据特定键的值对特定元素进行排序(因此,在上面的示例中,按照properties.name进行排序。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2015-05-20 01:48:22

好了,在IRC频道的帮助下,我找到了答案。

基本上,它看起来是这样的:

代码语言:javascript
复制
jq \
  '.components.rows|=sort_by(.id)|.components.rows[].properties|=sort_by(.name)' \
  file.json > out.json

选择正确的对象,

如果需要,可以进入数组,

然后sort_by一个值。

我正在尝试sort_by(.components.rows.id),但失败了。

|=而不是|传递这些值,而不是剥离它们。

票数 94
EN

Stack Overflow用户

发布于 2019-09-19 20:46:11

这并没有回答这个问题,但这里有另一种按属性/键排序的方法:

代码语言:javascript
复制
jq --sort-keys . my_file > sorted_file

-或者-

代码语言:javascript
复制
jq -S . my_file > sorted_file
票数 67
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30331504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档