awk 및 sed를 사용하여 JSON 파일에서 목록을 읽는 방법

awk 및 sed를 사용하여 JSON 파일에서 목록을 읽는 방법

JSON 파일 목록이 있습니다 apps.json.

{
"properites":{
   "apps":["apple","orange","mango"]
}
}

이 파일을 읽고 개체를 가져와야 합니다.

나는 다음을 사용했다:

fwk_app = $( awk '/apps/{ print }' ${apps.json} | grep apps | awk -F: '{ print } substr($0, index($0,$2))}' |sed 's/(,*\)"[/\"]*$/\1/' );
for item in fwk_app:
do
echo"$item"
done

출력은 다음과 같습니다

mango

내가 필요한 출력은 다음과 같습니다

apple
orange
mango

답변1

JSON 파일을 구문 분석하는 올바른 방법은 JSON 구문 분석기를 사용하는 것입니다. 이것jq유용이것은 명령줄과 스크립트에 대한 파서입니다:

jq -r '.properites.apps[]' apps.json

이것은 출력됩니다

apple
orange
mango

이를 위해서는 파일에 있는 JSON 문서의 최상위 개체에서 배열 요소를 추출해야 합니다 jq. 이 옵션을 사용하려면 JSON으로 인코딩된 데이터가 아닌 "원시" 데이터의 출력이 필요합니다.appsproperitesapps.json-rjq

한 줄에 탭으로 구분된 출력을 얻으려면 다음을 사용하십시오.

jq -r '.properites.apps | @tsv' file

이것은 출력됩니다

apple   orange  mango

@tsv연산자는 배열을 승인하고 이를 탭으로 구분된 목록으로 출력합니다. 대신 을 사용하여 @csv올바르게 인용된 CSV 출력을 얻을 수 있습니다.

JSON 문서가

{
  "properites": {
    "apps": [
      "apple",
      "orange",
      "mango"
    ]
  }
}

또는

{"properites":{"apps":["apple","orange","mango"]}}

(동일한 JSON 문서와 동일한 형식입니다.)

답변2

당신이 사용할 수있는 python:

python -c '
import json, sys
data = json.load(sys.stdin)
for el in data["properites"]["apps"]:
  print (el)
' < apps.json

답변3

가장 좋은 답변입니다.JSON 모듈과 함께 제공됩니다:

ruby -rjson -e '
    data = JSON.parse(IO.read(ARGV.shift))
    puts data["properites"]["apps"].join("\n")
' apps.json

답변4

grep -P가능한 경우 다음을 사용할 수도 있습니다.

grep -wF  '"apps":' apps.json | grep -Po '[[,]"\K[^"]*'

그러나 이것(및 awk@Carlos가 제공하는 솔루션)은 입력이 다음과 같은 경우에만 작동합니다.정확히표시된 것처럼 json동일한 콘텐츠의 형식이 다르게 지정되지는 않습니다.

또는 의 모듈 json과 같은 적합한 파서를 선호해야 합니다!jqpythonjson

관련 정보