2017-07-12 10 views
2

更新内容

{ 
"Name":"SA", 
"Password":"yyyyy", 
"Mappings" : { 
"RegionMap" : { 
    "us-east-1"  : { "AMI" : "xxxxxx" }, 
    "us-east-2"  : { "AMI" : "" }, 
    "us-west-1"  : { "AMI" : "" }, 
    "us-west-2"  : { "AMI" : "" }, 
    "ca-central-1" : { "AMI" : "" }, 
    "eu-central-1" : { "AMI" : "" }, 
    "eu-west-1"  : { "AMI" : "" }, 
    "eu-west-2"  : { "AMI" : "" }, 
    "ap-south-1"  : { "AMI" : "" }, 
    "ap-southeast-1" : { "AMI" : "" }, 
    "ap-southeast-2" : { "AMI" : "" }, 
    "ap-northeast-1" : { "AMI" : "" }, 
    "ap-northeast-2" : { "AMI" : "" }, 
    "sa-east-1"  : { "AMI" : "" }  
    } 
} 
} 

私のタスクが与えられたJSONファイルにus-east-1AMIキーの値を更新し、更新されたファイルを作成することです新しいファイルとして。リダイレクト演算子を使用してjqプラグインを使用しています。それはオブジェクト内の内容をoverwriteに使用することができる+演算子を持っています。

次のように私の expected出力は私の現在のコマンドが期待される出力とを

{ 
"Name":"SA", 
"Password":"yyyyy", 
"Mappings" : { 
"RegionMap" : { 
    "us-east-1"  : { "AMI" : "abcd" }, 
    "us-east-2"  : { "AMI" : "" }, 
    "us-west-1"  : { "AMI" : "" }, 
    "us-west-2"  : { "AMI" : "" }, 
    "ca-central-1" : { "AMI" : "" }, 
    "eu-central-1" : { "AMI" : "" }, 
    "eu-west-1"  : { "AMI" : "" }, 
    "eu-west-2"  : { "AMI" : "" }, 
    "ap-south-1"  : { "AMI" : "" }, 
    "ap-southeast-1" : { "AMI" : "" }, 
    "ap-southeast-2" : { "AMI" : "" }, 
    "ap-northeast-1" : { "AMI" : "" }, 
    "ap-northeast-2" : { "AMI" : "" }, 
    "sa-east-1"  : { "AMI" : "" }  
    } 
} 
} 

提供されていないされて

jq '.Mappings.RegionMap + { "us-east-1":{"AMI":"abcd"}}' 
<OldfileName> > <Newfilename> 

を誰かがリダイレクト演算子を使用して、予想される出力を達成することで私を助けることができますか?

私はcygwin環境でコマンドを実行しており、jqバージョンは1.5です。

... 
"Password":"yyyyy" <---- 
... 

それは次のようになります。

EDIT

は、あなたの入力JSONが無効になります最初の問題は、この行(3行目)でパスワードの後に​​キー

答えて

2

をカンマを追加しました続いて,とした。

jq '.Mappings.RegionMap["us-east-1"].AMI = "abcd"' oldfile > newfile 

newfile内容::

{ 
    "Name": "SA", 
    "Password": "yyyyy", 
    "Mappings": { 
    "RegionMap": { 
     "us-east-1": { 
     "AMI": "abcd" 
     }, 
     "us-east-2": { 
     "AMI": "" 
     }, 
     "us-west-1": { 
     "AMI": "" 
     }, 
     "us-west-2": { 
     "AMI": "" 
     }, 
     "ca-central-1": { 
     "AMI": "" 
     }, 
     "eu-central-1": { 
     "AMI": "" 
     }, 
     "eu-west-1": { 
     "AMI": "" 
     }, 
     "eu-west-2": { 
     "AMI": "" 
     }, 
     "ap-south-1": { 
     "AMI": "" 
     }, 
     "ap-southeast-1": { 
     "AMI": "" 
     }, 
     "ap-southeast-2": { 
     "AMI": "" 
     }, 
     "ap-northeast-1": { 
     "AMI": "" 
     }, 
     "ap-northeast-2": { 
     "AMI": "" 
     }, 
     "sa-east-1": { 
     "AMI": "" 
     } 
    } 
    } 
} 
+0

@RomanPerekrestおかげ

それを修正した後、あなたは簡単に必要なプロパティ値を更新することができます。出来た。また、私の編集 – shubhamagiwal92

+0

@ shubhamagiwal92を参照してください、あなたは歓迎です – RomanPerekhrest

+0

大したことではありませんが、固定値を割り当てているので、この場合単純な割り当て '='を使用します。私は新しい値を決定するために現在の値が必要な場合に '| ='を予約します。 –

関連する問題