다음과 유사한 컬 호출이 포함된 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"
대안을 사용해 보세요 . 이 문제를 디버깅하려면 환경에 대한 추가 정보가 필요합니다.