Преобразуйте список строк в массив JSON с помощью jq

Имея список строк (по одной в строке), например

      str1
str2
...

как мне преобразовать их в список JSON ["str1", "str2"]?

1 ответ

Предполагая, что ввод задан на stdin, следующая команда решает проблему:

      jq -Rn '[inputs]'

Флаг считывает ввод как "необработанные" (т. Е. Строки без кавычек) и -n передает стандартный ввод inputs (прихлебывая -s не работает, потому что в сочетании с -R, он считывает весь ввод как одну строку). Добавлять -c чтобы напечатать JSON в одной строке, как в вопросе.

Любые пустые строки (например, завершающий символ новой строки) можно пропустить, добавив небольшой фильтр:

      jq -Rn '[inputs|select(length>0)]'

Если строки разделены другими символами, например ,, строка может быть разделена

      jq -R 'split(",")'

Это можно использовать для разделения на \n также для решения вышеуказанного случая, но мое (непроверенное) предположение состоит в том, что вышеуказанное решение более переносимо с системами, использующими другие терминаторы линии.

Другие вопросы по тегам