2017-01-16 9 views
0

私はjqを使ってcURLレスポンスを解析して修正しています。だから、最後のディレクトリがパスから削除されBash jq modify json:getとset

A)入力JSON

[ 
    { 
     "id": 169, 
     "path": "dir1/dir2" 
    } 
] 

B)出力JSON

[ 
    { 
     "id": 169, 
     "path": "dir1" 
    } 
] 

:私は次のように、JSONでキーの値を変更したいです。私はスクリプトを使用します:

curl --header -X GET -k "${URL}" | jq '[.[] | {id: .id, path: .path_with_namespace}]' | jq '(.[] | .path) = "${.path%/*}"' 

最後のパイプは正しくありません。これは私が立ち往生した場所です。ポイントはpathの値を取得し、それを変更することです。どんな助けもありがとうございます。

答えて

2

splitjoinを使用してパスを処理し、を使用して正しい式を.path属性にバインドします。

... | jq '.[] | .path|=(split("/")[:-1]|join("/")) 
    split("/")
  • 全てからなる配列を返すが、x
  • join("/")の最後の要素は、単一のを返すために/を有する入来配列の要素を組み合わせx[:-1]アレイ
  • の文字列を受け取り、返し文字列。
  • .path|=x.pathの値をとり、フィルタxを使用してフィードし、結果の値を.pathに再度割り当てます。
+0

パーフェクト、ありがとう、トン:D – Sid