다음 jq
과 같은 JSON 구조를 구문 분석 하려고합니다 .
{
"a" : 1,
"b" : 2,
"c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}
즉, JSON의 요소는 이스케이프 된 json이있는 문자열입니다.
그래서 저는
$ jq [.c] myFile.json | jq [.id]
그러나 그것은 jq: error: Cannot index string with string
.c의 출력이 JSON이 아닌 문자열이기 때문입니다. 이 문자열을 구문 분석하기 위해 jq를 어떻게 얻습니까?
내 초기 솔루션은 sed를 사용하여 모든 이스케이프 문자 ( \":\"
, \",\"
및 \"
) 를 대체하는 것입니다. 하지만 이는 지저분합니다. 이렇게 jq
할 수 있는 방법이 있다고 가정 합니다.
감사!
편집 : 또한 여기에서 사용할 수있는 jq 버전은 다음과 같습니다.
$ jq --version
jq version 1.3
필요한 경우 업데이트 할 수있을 것 같습니다.
답변
답변
문자를 이스케이프 해제하는 원시 출력 (-r)을 사용할 수 있습니다.
jq -r .c myfile.json | jq .id
ADDENDUM : 이것은 jq 1.3 이상에서 작동한다는 장점이 있습니다. 실제로 -r 옵션이있는 모든 버전의 jq에서 작동합니다.