2016-11-15 13 views
0

私はちょうどjq jsonパーサーを使い始めましたが、とにかく複数選択するにはselectですか? 私はこれがあります。JQで複数の条件を選択する

cat file | jq -r '.Instances[] | {ip: .PrivateIpAddress, name: .Tags[]} 
           | select(.name.Key == "Name")' 

を私も含める必要が.name.Key == "Type"

これはJSONです:

{ 
    "Instances": [ 
    { 
     "PrivateIpAddress": "1.1.1.1", 
     "Tags": [ 
     { 
      "Value": "Daily", 
      "Key": "Backup" 
     }, 
     { 
      "Value": "System", 
      "Key": "Name" 
     }, 
     { 
      "Value": "YES", 
      "Key": "Is_in_Domain" 
     }, 
     { 
      "Value": "PROD", 
      "Key": "Type" 
     } 
     ] 
    } 
    ] 
} 

そして、これが現在の出力です:

{ 
    "ip": "1.1.1.1", 
    "name": "System" 
} 
{ 
    "ip": "2.2.2.2", 
    "name": "host" 
} 
{ 
    "ip": "3.3.3.3", 
    "name": "slog" 
} 

希望出力:

{ 
    "ip": "1.1.1.1", 
    "name": "System", 
    "type": "PROD" 
} 
{ 
    "ip": "2.2.2.2", 
    "name": "host", 
    "type": "PROD" 
} 
{ 
    "ip": "3.3.3.3", 
    "name": "slog", 
    "type": "PROD" 
} 

これを行う正しい方法は何ですか?ありがとう。

答えて

2

「正しい」方法はありませんが、それを実行する方法があります。

タグは、オブジェクトへの変換を単純にする形式です(オブジェクトエントリです)。プロパティに簡単にアクセスできるように、タグをオブジェクトに変換します。

$ jq '.Instances[] 
    | .Tags |= from_entries 
    | { 
     ip: .PrivateIpAddress, 
     name: .Tags.Name, 
     type: .Tags.Type 
     }' file 
+0

ありがとうございました。このクエリはjqプレイでは動作しますが、私のubuntuマシンではjqでは動作しません。き – Moshe

+0

'@Jeffメルカドあなたのデータに含まれるすべてのタグを行い{ヌル "タイプ":ヌル、 "名前":ヌル、 "IP" を}:エラー:オブジェクトキー としてnullを使用することはできませんJQは':私が取得します'key'値は?このエラーは、一部の人がそうでないことを示しているようです。 –

+0

いいえ、私はすべてではないと思います。エラーを回避する方法はありますか? @ジェフメルカド – Moshe

関連する問題