Как насчет perl
:
#!/usr/bin/perl
use strict;
use warnings;
use JSON;
my $json_list;
while ( my $json_str = <> ) {
push ( @$json_list, from_json ( $json_str ) );
}
print to_json ( $json_list, { pretty => 1, canonical => 1 } );
Принимает данные на STDIN
или myscript.pl somefilename
и берет указанный вами ввод и строит из него массив JSON.
Результат:
[
{
"a" : 1,
"b" : 1,
"c" : 2
},
{
"a" : 3,
"b" : 3,
"c" : 1
},
{
"a" : 1,
"b" : 2,
"c" : 3
}
]
Я пришел в эту тему за сообщением, просто чтобы добавить один совет для пользователей, я обнаружил, что если в самом имени файла есть ':', это вызовет проблему, так как некоторые программы генерируют файлы с отметкой времени например "аудио 12 :34 :14.ogg"
Для меня ошибка «Протокол не найден» была вызвана «:» в имени выходного файла. Удаление и повторное добавление звучит как обходной путь и ненужное усложнение. К счастью, мне удалось найти решение -, просто добавив file:
перед именем файла. Например, это будет работать, даже если $file
содержит подстроку типа «09 :02 :21» :
ffmpeg -i "$file" -acodec pcm_s16le -vcodec copy "file:${file:r:t}".mov
В приведенной выше команде только часть file:
важна в контексте этого ответа; но в случае, если кто-то задается вопросом, что делает ${file:r:t}
, он в оболочке zsh удаляет абсолютный путь и строки расширения -из переменной $file
. Обратите внимание, что file:
не требовалось для имени входного файла в этом случае, но было необходимо для имени выходного файла, даже если оба содержат несколько символов " :".