次のJSON形式のWebサーバー応答出力があります。
{"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