JQ 및 bash를 사용하여 줄바꿈이 포함된 JSON 처리 [닫기]

JQ 및 bash를 사용하여 줄바꿈이 포함된 JSON 처리 [닫기]

다음과 유사한 컬 호출이 포함된 JSON을 받습니다.

output="$(curl -s "$api_url")"

이 출력은 JSON 형식이며 jq에서 다음과 같이 처리해야 합니다.

{
    "test": "Hello\nThere!"
}

echo지금은 jq가 작동하도록 하기 위해 다음과 같은 파이프라인 조합을 사용하고 있습니다 .

test="$(echo "$output" | jq -r ".test")"

그러나 JSON 및 JQ 오류에 새 줄이 포함되어 있으므로 예제 입력에서는 작동하지 않습니다.parse error: Invalid string: control characters from U+0000 through U+001F must be escaped at line 2, column 6

jq가 이해할 수 있도록 데이터를 변경할 수 있는 방법이 있나요?

답변1

그래서단어입력은 다음과 같습니다.

$ output='{
>     "test": "Hello
> There!"
> }'
$ echo "$output" | jq -r ".test"
parse error: Invalid string: control characters from U+0000 through U+001F must be escaped at line 3, column 7

JSON여러 줄 문자열이 없습니다. 따라서 API에서 이 리터럴을 얻으면 다음과 같습니다.API 오류,그리고 서버 측에서 수정해야 합니다.


API가 실제로 이와 같은 것을 반환한다고 말했기 때문에 {"test": "Hello\nThere!"}Bash 4.4.23의 jq 1.5에서 작동하기 때문에 문제는 명령에 있어야 합니다.

$ output='{"test": "Hello\nThere!"}'
$ echo "$output" | jq -r ".test"
Hello
There!

eval(악한 일입니다), echo -e다른 특수 명령으로 인해 이스케이프 문자가 해독될 수 있습니다. printf '%s' "$output"대안을 사용해 보세요 . 이 문제를 디버깅하려면 환경에 대한 추가 정보가 필요합니다.

관련 정보