jq 将两个文本字符串转换为单独的 json 对象
jq to convert two text strings into separate json objects
如何将这两个文本字符串转换为单独的 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",
}
Shell 脚本:
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
一种方法是使用 index/1
,例如按照这些思路:
jq -R 'index(":") as $ix | {(.[:$ix]) : .[$ix+1:]}'
或者,如果您的 jq 支持正则表达式,您可能会考虑:
jq -R 'match( "([^:]*):(.*)" ) | .captures | {(.[0].string): .[1].string}'
或:
jq -R '[capture( "(?<key>[^:]*):(?<value>.*)" )] | from_entries'
如何将这两个文本字符串转换为单独的 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",
}
Shell 脚本:
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
一种方法是使用 index/1
,例如按照这些思路:
jq -R 'index(":") as $ix | {(.[:$ix]) : .[$ix+1:]}'
或者,如果您的 jq 支持正则表达式,您可能会考虑:
jq -R 'match( "([^:]*):(.*)" ) | .captures | {(.[0].string): .[1].string}'
或:
jq -R '[capture( "(?<key>[^:]*):(?<value>.*)" )] | from_entries'