다음과 같은 JSON 형식의 웹 서버 응답 출력이 있습니다.
{"status":"OK","result":{"string":{"variable":0},"string2":[{"id":"03489579q2074hvissdiuh:023427598042ztuoihsgasflbkc6dc7e000af669d6c94857d1a28f8cb338a9691c80eb8857c750c8ead70f29a","string3":"string4","latitude":"01.XXXXXXXX","longitude":"02.XXXXXXX"},]}}
response.txt
여러 번 반복하므로 그 이후에는 로 저장 "02.XXXXXXX"}
합니다 .","
내 예상 결과는 다음과 같습니다 "id"
.
03489579q2074hvidssiuh:023427598042ztuoihsgasflbkc6dc7e000af669d6c94857d1a28f8cb338a9691c80eb8857c750c8ead70f29a
각 ID 뒤에 새 줄을 넣으십시오.
나는 다음과 같은 것을 시도했습니다
grep -o '".*"' somefile | tr -d '",{}[]'
awk -F- '{
for (i=1;i<=NF;i++) {
if ($i ~ "^ram.+") { sub("^ram","",$i); print $i} }
}' response.txt
id
sed 's/.*id\(\w\+\).*/\1/' response.txt
sed 's/.*id..\(.*\)..300.*/\1/' -d '",{}[]' response.txt
sed 's/^.* id (\([0-9\.%]*\).*$/\1/' response.txt
그러나 일부 특수 문자가 여전히 존재하는 첫 번째 반복을 제외한 모든 것을 반환하거나 기본적으로 macOS 터미널에서 awk를 사용할 수 없기 때문에 오류를 반환합니다.
감사해요
편집: 다음은 더 많은 반복을 통한 출력입니다.
{"status":"OK","result":{"string1":{"veriable":0},"string2":[{"id":"XXXXX:XXXXX","tier":"normal","latitude":"01.XXXXX","longitude":"02.XXXXX"},{"id":"XXXXX:XXXXX","tier":"normal","latitude":"01.XXXXX","longitude":"02.XXXXX"},{"id":"XXXXX:XXXXX,"tier":"special","latitude":"01.XXXXX","longitude":"02.XXXXX"},{"id":"XXXXX:XXXXX","tier":"normal","latitude":"01.XXXXX","longitude":"02.XXXXX"}]}}
답변1
사용 jq
:
jq -r '.result.string2[].id' response.txt
입력하다:
{
"status": "OK",
"result": {
"string1": {
"veriable": 0
},
"string2": [
{
"id": "XXXXX:XXXXX",
"tier": "normal",
"latitude": "01.XXXXX",
"longitude": "02.XXXXX"
},
{
"id": "XXXXX:XXXXX",
"tier": "normal",
"latitude": "01.XXXXX",
"longitude": "02.XXXXX"
},
{
"id": "XXXXX:XXXXX",
"tier": "special",
"latitude": "01.XXXXX",
"longitude": "02.XXXXX"
},
{
"id": "XXXXX:XXXXX",
"tier": "normal",
"latitude": "01.XXXXX",
"longitude": "02.XXXXX"
}
]
}
}
산출:
XXXXX:XXXXX
XXXXX:XXXXX
XXXXX:XXXXX
XXXXX:XXXXX