У меня проблемы с пониманием деталей вашего вопроса, но похоже, что у вас есть:
- A JSON строка, представляющая объект, например,
'{"foo": "bar"}'
- Файл JSON, который содержит либо
- Ничего (файл пуст и поэтому недействителен JSON)
- массив JSON, например
[{"a": "b"}, {"c": "d"}]
И вы хотите добавить объект JSON к существующему массиву или, если файл пуст, создать новый массив с объектом в качестве собственного элемента.
Самый простой способ сделать это - сначала убедиться, что файл содержит действительный JSON, записав пустой массив, если он пуст, а затем безоговорочно добавить в этот список:
file='myfile.json'
object='{"Name": "FileName", "Size": "FileSize", "Action": "Action taken"}'
# Check if file is empty
if ! [ -s "$file" ]
then
# It is. Write an empty array to it
echo '[]' > "$file"
fi
# Read from the file, append the object, write to a temporary file
jq --argjson x "$object" '. += [$x]' < "$file" > tmp.json
# Overwrite the original file with the temporary one
mv tmp.json "$file"
Если вы начинаете с пустого файл (или нет файла), после успешного запуска файл будет содержать это:
[
{
"Name": "FileName",
"Size": "FileSize",
"Action": "Action taken"
}
]
Если вы запустите его еще раз, он будет содержать это:
[
{
"Name": "FileName",
"Size": "FileSize",
"Action": "Action taken"
},
{
"Name": "FileName",
"Size": "FileSize",
"Action": "Action taken"
}
]