2015-05-19 58 views
19

我们正在建设使用Pentaho的CTools库,它有它写出JSON格式文件的仪表板部分中的图形仪表盘编辑网站排序键和这些键的值的JSON文件。如何JQ

我想申请前办理登机手续,以便通过按键对它们进行排序与​​git,然后通过某些键的值转换到这些文件。目的是使差异更容易,因为编辑有重新安排所有json字段的习惯。

例如,我们可能有这样的事情:

{ 
    "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-keyshttp://stedolan.github.io/jq/)排序的所有键的,但我在努力寻找如何使用sort_by功能由某些键(因此,在上面的例子中的值,通过properties.name例如排序,然后排序某些特定元素。任何想法?

回答

34

好与IRC频道的一些帮助,我找到了答案。

基本上,它看起来像这样:

> jq '.components.rows|=sort_by(.id)|.components.rows[].properties|=sort_by(.name)' file.json > out.json

所以你做选择合适的对象,如果需要的话,然后sort_by只是需要一个值(我试图sort_by(.components.rows.id)其失败)走进阵列。

的| =代替|传递值而不是剥离它们。

+0

注:任何人究竟是谁愿意用CTools'.cdfde'文件要做到这一点,排序键似乎是确定一样,分类属性数组中的'name'元素,但排序''component'行'由'ID'是一个不,不会破坏的东西。所以不要这样做...... – karlos