Преобразование текстового файла в формате значения ключа в объект JSON - PullRequest
0 голосов
/ 26 мая 2020

У меня есть файл .env с таким содержимым:

APP_ENV=local
APP_DEBUG=true
APP_URL=http://example.com.br

И мне нужно преобразовать примерно так:

"environment": [
    {
        "name": "APP_ENV",
        "value": "local"
    },
    {
        "name": "APP_DEBUG",
        "value": "true"
    },
    {
        "name": "APP_URL",
        "value": "http://example.com.br"
    }
]

Я пытаюсь преобразовать файл в bash, затем преобразовать в json с помощью jq, но безуспешно. Кто-нибудь может дать чаевые?

Ответы [ 2 ]

0 голосов
/ 01 июня 2020

адаптировано из Преобразование текстового файла с парой ключ = значение в c json формат в jq

jq -sR '{"Environment": [ split("\n")[:-1][] | rtrimstr("\\r") | split("=") | {name:.[0],value:.[1]}]}' env
0 голосов
/ 26 мая 2020
env $(cat .env) jq -n '$ENV | with_entries(select(.key | index("APP_") == 0))'

Приведенная выше команда запускает jq в среде, измененной в соответствии с файлом .env, а затем выбирает подмножество среды, в которой имена переменных начинаются с APP_.

Руководство jq есть объяснение относительно функций $ENV, with_entries, select и index, которые я использовал.

https://stedolan.github.io/jq/manual/

Решение меньшего размера:

env -i $(cat .env) $(which jq) -n '$ENV'

Команда env -i запускает jq в среде, которая в остальном пуста, за исключением значений в .env. jq тогда сбрасывает только среду. Этот метод снимает ограничения на запуск префиксов тем или иным образом.

$(which jq) помещает в команду абсолютный путь к jq двоичному файлу, что необходимо, поскольку нет переменной среды PATH, в которой он может искать для программ. Помните, что env -i начинается с пустой среды.

Здесь выполнение jq не требует ввода текста. Поэтому я использовал jq -n, что предполагает ввод null.

...