포함된(인용된) json 문자열을 json으로 변환하는 방법

포함된(인용된) json 문자열을 json으로 변환하는 방법

저는 json을 구문 분석하기 위해 "jq"에 익숙합니다.

속성 중 하나가 json 문자열인 json 응답을 생성하는 서비스를 사용합니다. jq를 사용하여 처리할 수 있도록 해당 참조 값을 유효한 json 문자열로 어떻게 변환합니까?

예를 들어 "jq."에서 간단히 인쇄된 json을 본 경우 출력의 짧은 발췌문은 다음과 같습니다.

"someJsonString": "{\"date\":\"2018-01-08\", ...

jq를 사용하여 속성 값을 가져올 수 있지만 "unescape"를 통해 인용된 문자열을 유효한 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)

답변1

jq와 함께fromjson기능:

샘플 stuff.json콘텐츠:

{
  "stuff": "{\"date\":\"2018-01-08\"}"
}

jq -c '.stuff | fromjson' stuff.json

산출:

{"date":"2018-01-08"}

답변2

raw이에 대한 플래그 가 있습니다 .

    -r      output raw strings, not JSON texts;

jq -rc .stuff stuff.json

산출

{"date":"2018-01-08"}

관련 정보