2016-12-20 1 views
0

私が今まで見てきたすべての例では、出力(フィルターアウト)の一部が「削減」されています。入力したい部分を操作する方法を理解していますが、残りの部分を出力する方法はわかりません。jsonを使用してjsonファイルの完全な内容を再構築し、関心のある部分だけを操作する方法は?

特定の例は、いくつかの高レベルエントリ "array1"、 "field1"、 "array2"、 "array3"と言う入力ファイルです。各配列の内容は異なります。

jq '.array1 | sort_by(.name)' test.json 

が、私はまた、「配列1」だけでなく、他のすべてのデータに、この出力をしたい:私は何をしたい具体的な処理によってなんとかです「名」フィールドで「ARRAY1」エントリをソートすることです保存される。

例入力:

{ 
    "field1": "value1", 
    "array1": 
     [ 
      { "name": "B", "otherdata": "Bstuff" }, 
      { "name": "A", "otherdata": "Astuff" } 
     ], 
    "array2" : 
     [ 
      array2 stuff 
     ], 
    "array3" : 
     [ 
      array3 stuff 
     ] 
} 

予想される出力:

{ 
    "field1": "value1", 
    "array1": 
     [ 
      { "name": "A", "otherdata": "Astuff" }, 
      { "name": "B", "otherdata": "Bstuff" } 
     ], 
    "array2" : 
     [ 
      array2 stuff 
     ], 
    "array3" : 
     [ 
      array3 stuff 
     ] 
} 

私はマップを使用してみましたが、私は入力の任意の型を扱うことができるように構文が正しいように見えることはできません配列以外の名前で並べ替えたい

答えて

1

代入演算子(=|=+=など)を使用するたびに、式のコンテキストは変更されません。したがって、トップレベルのフィルタが割り当てである限り、最後に残りのデータが得られます(変更が適用された状態)。

この場合、array1アレイをソートするだけで、アレイを更新することができます。

.array1 |= sort_by(.name) 
関連する問題