bash 쉘을 사용하여 JSON 키 값을 추출하는 방법은 무엇입니까?

bash 쉘을 사용하여 JSON 키 값을 추출하는 방법은 무엇입니까?

나는 bash 쉘을 사용하고 있습니다. JSON 문자열의 키 값을 추출할 수 있는 무언가를 쉘 스크립트에 포함하고 싶습니다...

davea$ json='{"id": "abc", "name": "dave"}'

"grep"을 시도했지만 실패했습니다.

davea$ grep -Po '"id":.*?[^\\]",' $json
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
    [-e pattern] [-f file] [--binary-files=value] [--color=when]
    [--context[=num]] [--directories=action] [--label] [--line-buffered]
    [--null] [pattern] [file ...]

그런 다음 Python과 관련된 솔루션을 찾았지만 그것도 실패했습니다 ...

localhost:tmp davea$ echo $json | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["id"]'
  File "<string>", line 1
    import json,sys;obj=json.load(sys.stdin);print obj["id"]

시스템에 추가 항목을 설치하지 않고 "id" 키 값을 어떻게 추출할 수 있나요?

답변1

Python 코드가 정상적으로 실행됩니다. 사용하는 경우 print매개변수를 묶어야 할 수도 있습니다 python3.

echo "$json" | python2 -c 'import json,sys;obj=json.load(sys.stdin);print obj["id"]'

echo "$json" | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["id"])'

또는 다음을 사용하십시오 jq.

echo "$json" | jq -r .id

위의 모든 솔루션의 결과:

abc

관련 정보