2015-05-19 50 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