아래와 같이 거대한 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": []
}
기본적으로 다음 user@domain
과 같이 json 파일에서 모든 이메일 주소를 검색하고 싶습니다 .EmailAddress: "user@domain"
[email protected]
[email protected]
답변1
사용잭, 적합한 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
배열이나 객체가 아닌 경우에도 오류를 출력하지 않습니다..
대체 연산자: //
양식의 필터는 sum 이외의 결과를 생성하는 것과a // b
동일한 결과를 생성합니다 . 그렇지 않으면 와 동일한 결과가 생성됩니다 .a
a
false
null
a // b
b
이는 기본값을 제공하는 데 유용합니다. 입력에 요소가 없으면
.foo // 1
입력이 평가됩니다 .1
.foo
empty
empty
결과가 반환되지 않았습니다. 단 하나도 아닙니다. 심지어null
.