jq для преобразования двух текстовых строк в отдельные объекты json

Как преобразовать эти две текстовые строки в отдельные объекты json

Текстовые строки:

start process: Mon May 15 03:14:09 UTC 2017
logfilename: log_download_2017

Вывод JSON:

{
"start process": "Mon May 15 03:14:09 UTC 2017",
}
{
"logfilename": "log_download_2017",
}

Сценарий оболочки:

logfilename="log_download_2017"
echo "start process: $(date -u)" | tee -a $logfilename.txt | jq -R split(:) >> $logfilename.json
echo "logfilename:" $logfilename | tee -a $logfilename.txt | jq -R split(:) >> $logfilename.json

person Gabe    schedule 15.05.2017    source источник


Ответы (1)


Одним из подходов было бы использование index/1, например. по этим строкам:

jq -R 'index(":") as $ix | {(.[:$ix]) : .[$ix+1:]}'

Или, если ваш jq поддерживает регулярное выражение, вы можете рассмотреть:

jq -R 'match( "([^:]*):(.*)" ) | .captures | {(.[0].string): .[1].string}'

or:

jq -R '[capture( "(?<key>[^:]*):(?<value>.*)" )] | from_entries'
person peak    schedule 15.05.2017
comment
Спасибо, очень полезно увидеть ряд подходов, которые позволили мне легче читать документацию jq. Я выбрал первый подход, и он работал во всех моих случаях с простыми текстовыми строками, такими как объявления переменных. Далее идут списки и массивы, но откроется новый вопрос для рассмотрения некоторых примеров. Еще раз спасибо, было здорово иметь варианты кода, которые работают и могут быть протестированы. - person Gabe; 15.05.2017
comment
@Gabe - Рад узнать, что некоторые варианты оказались полезными. Вы читали stackoverflow.com/help/someone-answers? - person peak; 15.05.2017