출력에서 특정 속성 경로에 대해 인용된 문자열의 내용을 추출하는 방법은 무엇입니까?

출력에서 특정 속성 경로에 대해 인용된 문자열의 내용을 추출하는 방법은 무엇입니까?

다음과 같은 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

관련 정보