次のような巨大なJSONがあります。サンプル
{
"Key": "4fa21496-3534-4480-8405-a0f7699a915e",
"FirstName": "XX",
"XX": "Liggins",
"City": "Dallas",
"RegionCode": "TX",
"RegionName": "Texas",
"Country": "United States",
"Latitude": "32.783060",
"Longitude": "-96.806670",
"TimeZone": "America/Chicago",
"IsCASL": false,
"Updated": "2018-02-28T07:32:28",
"HQCompanyName": "IHOP",
"Position": "Server",
"Level": "General",
"Department1": "General",
"DecisionMaker": false,
"EmailAddress": "[email protected]",
"EmailValidationStatus": "AcceptAll",
"EmailValidationDate": "2018-02-10T03:02:07.1692141+00:00",
"HQCompanyId": "XX2f37e171e26112cb",
"Experience": [
{
"HQCompanyId": "XX2f37e171e26112cb",
"Title": "Server",
"Level": "General",
"Department1": "General",
"DecisionMaker": false,
"Start": "2014",
"End": "2015",
"EmailAddress": "[email protected]",
"SecondaryCompanyId": "10407780-c062-40c9-8783-110aa931a9c5",
"Updated": "2018-08-31T23:52:31.663147Z"
},
{
"HQCompanyId": "128ce753-6a72-4028-8a17-d76a1c53b22e",
"Title": "XX",
"Level": "General",
"Department1": "General",
"DecisionMaker": false,
"Start": "May 2015",
"End": "December 2015",
"Duration": "7 months",
"Updated": "2018-08-31T23:52:31.663147Z"
}
],
"Education": [
{
"Name": "XX",
"Degree": "XX or equivalent",
"Start": "2004",
"End": "2008"
}
],
"SearchUrl": "https://www.google.com/#newwindow=1&q=XX+X",
"SourceList": []
}
私はJSONファイルからすべてのメールアドレスを取得したいのですが、基本的にはuser@domain
次EmailAddress: "user@domain"
のようになります。
[email protected]
[email protected]
答え1
使用jq適切な JSON 解析ツール:
$ jq -r '..|.EmailAddress? //empty' infile.json
[email protected]
[email protected]
オンラインで試す:https://jqplay.org/s/yjkKkCxecg
からjq マニュアル:
--raw-output / -r
:
このオプションを使用すると、フィルターの結果が文字列の場合、引用符付きの JSON 文字列としてフォーマットされるのではなく、標準出力に直接書き込まれます。
再帰降下:
..
再帰的に下降し.
、すべての値を生成します。
[...]
この例では、..|.foo?
"below" で見つかったすべてのオブジェクト内のオブジェクト キー "foo" のすべての値を検索するために使用しました.
。
オプションのオブジェクト識別子インデックス:
.foo?
と同じですが、 が配列またはオブジェクトでない.foo
場合でもエラーは出力されません。.
代替演算子: //
がおよび 以外の結果を生成する場合、という 形式のフィルタはa // b
と同じ結果を生成します。それ以外の場合、は と同じ結果を生成します。a
a
false
null
a // b
b
これはデフォルトを提供するのに便利です。入力に要素がない場合、
.foo // 1
が評価されます。1
.foo
empty
empty
結果が返されません。まったくありません。 さえありませんnull
。