карта, но с символами новой строки между парами ключей - PullRequest
0 голосов
/ 22 марта 2019

Скажите, что у меня есть ввод как

{"DESCRIPTION": "Need to run script to do stuff", "PRIORITY": "Medium"}

но также получить ввод, как

{"STACK_NAME": "applecakes", "BACKEND_OR_INTEGRATIONS": "integrations", "PRIORITY": "Medium"}

т.е. параметры могут быть совершенно разными.

Мне нужно получить вывод в более удобном формате, чтобы отправить его Джире, чтобы оформить билеты. В частности, я хотел бы убрать форматирование json и вставить \n между каждой парой ключей. Вот как должны выглядеть приведенные выше образцы:

DESCRIPTION: Need to run script to do stuff\nPRIORITY: Medium

STACK_NAME: applecakes\nBACKEND_OR_INTEGRATIONS: integrations\nPRIORITY: Medium

В этом может быть некоторая гибкость, если, например, нужно больше места или что-то еще.

Пока у меня все получилось (при условии, что мой ввод хранится в переменной с именем description

echo $description | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]"

Это работает, чтобы убрать форматирование JSON, но не обрабатывает переводы строки. Я поставлен в тупик о том, как сделать так, чтобы я разделял только на каждую пару ключей, а не на каждый пробел или что-нибудь столь же грязное. Что мне нужно добавить, чтобы включить новые строки? Карта - даже мой лучший выбор?

Ответы [ 2 ]

3 голосов
/ 22 марта 2019

Просто объедините массив строк с \\n (последовательность символа \, который нам нужно экранировать и символ n) и используйте raw-output:

jq --raw-output 'to_entries | map("\(.key) : \(.value)") | join("\\n")'

Попробуйте здесь .

1 голос
/ 22 марта 2019

Или более эффективно и проще:

jq -r 'to_entries[] | "\(.key) : \(.value)"'

Это создает одну строку на пару ключ-значение.

Двухсимвольная последовательность \n в качестве строки соединения

С вашим образцом JSON вызов:

 jq -j -r 'to_entries[] | "\(.key) : \(.value)", "\\n" '

приведет к:

STACK_NAME : applecakes\nBACKEND_OR_INTEGRATIONS : integrations\nPRIORITY : Medium\n

Обратите внимание на завершающий "\ n".

...