Я пытаюсь преобразовать приведенный ниже json в таблицу уценки (документы GitHub (файл .md)), однако не могу этого сделать.
{
"service_1":"abc-endpoint.vpce.amazonaws.com",
"service_2":"def-endpoint.vpce.amazonaws.com",
"service_3":"xyz-endpoint.vpce.amazonaws.com"
}
Команда, которую я пробовал:
cat json_file | jq -r '{"NAME": "ENDPOINT_ID"} + . | to_entries[] | "\(.key)\t\(.value)"'
Вывод, который я получаю:
NAME ENDPOINT-ID
service_1 abc-endpoint.vpce.amazonaws.com
service_2 def-endpoint.vpce.amazonaws.com
service_3 xyz-endpoint.vpce.amazonaws.com
Вышеприведенный вывод при фиксации в файле README.md github теряет отступы (пробелы) и неправильно делится на строки и столбцы, что приводит к плохой визуализации.
Ссылка, которую я прошел:
https://www.markdownguide.org/extended-syntax/#tables
Ожидаемый результат:
| NAME | ENDPOINT_ID |
| -------- | -------- |
| service_1 | abc-endpoint.vpce.amazonaws.com |
| service_2 | def-endpoint.vpce.amazonaws.com |
| service_3 | xyz-endpoint.vpce.amazonaws.com |
Полужестко закодированное решение может выглядеть так:
"|NAME|ENDPOINT_ID|\n|------|------|\n" +
(to_entries | map("|\(.key)|\(.value)|") | join("\n"))
key
и value
|
\n
)Выше будет вывод:
|NAME|ENDPOINT_ID|
|------|------|
|service_1|abc-endpoint.vpce.amazonaws.com|
|service_2|def-endpoint.vpce.amazonaws.com|
|service_3|xyz-endpoint.vpce.amazonaws.com|
Что отображается как
Чуть менее жестко закодирован, чем ответ @ 0stone0:
% jq -r '{"NAME": "ENDPOINT_ID"} + {"---": "---"} + . | to_entries[] | "|\(.key)|\(.value)|"'<<-eof 55ms
{
"service_1":"abc-endpoint.vpce.amazonaws.com",
"service_2":"def-endpoint.vpce.amazonaws.com",
"service_3":"xyz-endpoint.vpce.amazonaws.com"
}
eof
Дает мне:
|NAME|ENDPOINT_ID|
|---|---|
|service_1|abc-endpoint.vpce.amazonaws.com|
|service_2|def-endpoint.vpce.amazonaws.com|
|service_3|xyz-endpoint.vpce.amazonaws.com|
Выглядит правильно в предварительном просмотре github:
Я не хочу сказать, что это существенная разница или лучше, но вы объединили форматирование с данными в строках заголовка и разделителя, в то время как у меня есть только символы новой строки и символы вертикальной черты на этапе форматирования.
О нет, я не читал это так, просто из любопытства я начал с решения, подобного вашему, но, поскольку оно оставляет завершающую новую строку, я пошел по пути map/join. Спасибо за разъяснение кстати ;)
преобразовать вывод jq в csv, а затем отобразить результат с помощью утилиты csview
$ cat json_file |jq -r '{"NAME": "ENDPOINT_ID"} + . |to_entries[] | [.key, .value] | @csv' |csview -s Markdown
| NAME | ENDPOINT_ID |
|-----------|---------------------------------|
| service_1 | abc-endpoint.vpce.amazonaws.com |
| service_2 | def-endpoint.vpce.amazonaws.com |
| service_3 | xyz-endpoint.vpce.amazonaws.com |
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Не уверен, как это «менее жестко закодировано» xD