У меня есть массив bash, который я хочу преобразовать в json и записать в файл. Предположим, это
my_strings=("hello" "world")
Мне удалось преобразовать его в json и записать в файл с помощью:
for f in "${my_strings[@]}"; do printf '%s' "$f" | jq -R -s .; done | jq -s >> test_.json
и выходной результирующий файл выглядит так:
[
"hello",
"world"
]
Однако результат, который я хотел бы получить,
{
"strings_":
[
"hello",
"world"
]
}
Я попробовал добавить и добавить графики и ключ следующим образом:
printf '{\n\t"strings_":\n' > test_.json; for f in "${my_strings[@]}"; do printf '%s' "$f" | jq -R -s .; done | jq -s >> test_.json; printf "}\n" >> test_.json
но полученный отступ нехороший.
Есть лучший способ сделать это?
@Popeye в своей команде вы жестко кодируете строки массива, обычно они взяты из массива bash
Э-э, нет, это не так. Комментарий содержит результат, но на самом деле он не является частью кода.
Тогда я не понимаю вашего комментария: мне кажется, что вы читаете файл с cat для создания json. Мне нужно создать json, а затем записать в файл



Вы ищете что-то вроде этого:
$ my_strings=("hello" "world")
$ jq -n --args '{strings_: $ARGS.positional}' "${my_strings[@]}"
{
"strings_": [
"hello",
"world"
]
}
в простом ``` echo '{"strings":'$(cat test_.json)'}' | jq # { "strings": [ "привет", "мир" ] } ```