Обработка JSON, содержащего новые строки, с помощью JQ и bash [закрыто]

Запустите сценарий с TTY:

... ssh -q -tt $connection <<ENDSSH 
sqlplus -s "user/pass@con" <<EOF
set heading off
select * from ...
EOF
ENDSSH

(обратите внимание, что -T заменен на -tt )

3
01.10.2018, 10:15
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!"}, проблема должна быть с вашими командами, потому что это работает с jq 1.5 в Bash 4.4.23:

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

eval(, что является злом ), echo -eи другие специальные команды могут привести к декодированию экранированных символов. Попробуйте вместо этого использовать printf '%s' "$output". Для отладки этого потребуется дополнительная информация о вашей среде.

4
27.01.2020, 21:21

Теги

Похожие вопросы