出力から特定の属性パスの引用符付き文字列の内容を抽出するには?

出力から特定の属性パスの引用符付き文字列の内容を抽出するには?

次の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

おすすめ記事