[json] jq를 사용하여 JSON 문자열 구문 분석

다음 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

필요한 경우 업데이트 할 수있을 것 같습니다.



답변

jq에는이를위한 fromjson내장 기능이 있습니다.

jq '.c | fromjson | .id' myFile.json

fromjson 버전 1.4에서 추가되었습니다.


답변

문자를 이스케이프 해제하는 원시 출력 (-r)을 사용할 수 있습니다.

jq -r .c myfile.json | jq .id

ADDENDUM : 이것은 jq 1.3 이상에서 작동한다는 장점이 있습니다. 실제로 -r 옵션이있는 모든 버전의 jq에서 작동합니다.


답변