json 구문 분석에 대한 "jq"에 익숙합니다.
속성 중 하나가 json 문자열 인 json 응답을 생성하는 하나의 서비스로 작업합니다. 인용 된 값을 유효한 json 문자열로 변환하여 jq로 처리하려면 어떻게해야합니까?
예를 들어, "jq"에서 꽤 인쇄 된 일반 json을 보면 출력에 대한 짧은 발췌문이 있습니다.
"someJsonString": "{\"date\":\"2018-01-08\", ...
jq를 사용하여 해당 속성의 값을 얻을 수 있지만 인용 된 문자열을 "unscaping"하여 유효한 json으로 변환해야합니다.
sed에 파이프를 연결하고 여는 큰 따옴표와 끝 큰 따옴표를 제거하고 모든 백 슬래시 ( " sed -e 's/^"//' -e 's/"$//' -e 's/\\//g'
")를 제거 할 수 있다고 가정합니다 . 그것은 효과가있는 것처럼 보이지만 가장 강력한 솔루션처럼 보이지는 않습니다.
업데이트 :
내가하고있는 일을 조금 더 명확하게하기 위해 내가 시도한 것을 보여주는 몇 가지 생략 된 샘플이 있습니다.
% curl -s -q -L 'http://.../1524.json' | jq '.results[0].someJsonString' | jq .
"{\"date\":\"2018-01-08\",...
% echo $(curl -s -q -L 'http:/.../1524.json' | jq '.results[0].someJsonString') | jq .
"{\"date\":\"2018-01-08\",...
업데이트 :
완전히 독립된 예는 다음과 같습니다.
% cat stuff.json | jq .
{
"stuff": "{\"date\":\"2018-01-08\"}"
}
% cat stuff.json | jq '.stuff'
"{\"date\":\"2018-01-08\"}"
% cat stuff.json | jq '.stuff' | jq .
"{\"date\":\"2018-01-08\"}"
업데이트 :
실제 jq 표현식으로 마지막 출력을 처리하려고하면 다음과 같이됩니다.
% cat stuff.json | jq '.stuff' | jq '.date'
assertion "cb == jq_util_input_next_input_cb" failed: file "/usr/src/ports/jq/jq-1.5-3.x86_64/src/jq-1.5/util.c", line 371, function: jq_util_input_get_position
Aborted (core dumped)
아니요, 이스케이프 처리되지 않은 상태로 반환하지 않습니다. 그게 요점입니다.
—
David M. Karr
어때요
—
DopeGhoti
echo $(jq statement here)
?
아니, 변화가 없어
—
David M. Karr
@ DavidM.Karr, 가능하다면 가능하다면 실제 중요한 문자열과 최종 결과로 입력을 확장하십시오
—
RomanPerekhrest
jq
얻을 단지 문자열 속성 값을, 그것이 이스케이프 반환하지? 그렇다면 신선한 것으로 파이프하십시오jq
.