JSON용 XMLstarlet?

JSON용 XMLstarlet?

비슷한 도구가 있나요XML 스타하지만 XML 대신 JSON의 경우?

내 사용 사례: 일부 REST API에서 반환되는 계층적 JSON 문서에서 특정 값을 추출합니다.

XPath와 같은 표현을 통해 노드와 같은 것을 선택할 수 있으면 도움이 될 것입니다.

답변1

jq는 풍부한 표현 언어를 제공합니다JSON 문서에서 요소를 선택하는 데 사용됩니다.

sel따라서 XPath 표현식을 사용하는 명령 과 유사합니다 .xmlstartlet

예를 들어 Digital Ocean에서 사용 가능한 CentOS 7 커널 버전 목록을 레코드 형식으로 추출하려면 다음을 수행합니다.

$ jq '[ .kernels[] | select(.name | test("^CentOS 7 x64")) | del(.name)
        | "\(.version) \(.id)"] | .[]' kernels.json

또는 다음과 같이 단순화했습니다.

jq '.kernels[] | select(.name | test("^CentOS 7 x64")) |
     "\(.version) \(.id)" ' kernels.json

json은 다음과 같이 얻을 수 있습니다.

$ curl -o kernels.json -X GET -H "Content-Type: application/json" \
    -H "Authorization: Bearer $bearer" \
 "https://api.digitalocean.com/v2/droplets/$droplet/kernels?page=1&per_page=1000"

게다가객체 경로, 다른 JSON 쿼리 언어 - jq가 더 널리 사용 가능한 것으로 보이지만(예: Fedora 23에 패키지되어 있음)

여러 바인딩이 있는 jq와 같은 프로그램에서 이러한 쿼리 조각을 재사용하는 것은 쉽습니다(예:파이썬의 경우) 및 ObjectPath는 Python 모듈로도 사용할 수 있습니다.

관련 정보