jq 将两个文本字符串转换为单个 json 对象

jq to convert two text strings into a single json object

如何将这两个文本字符串转换为单个 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 . >> $logfilename.json
echo "logfilename:" $logfilename | tee -a $logfilename.txt | jq -R . >> $logfilename.json

如前所述在 ,转换 key:value 字符串的基本任务可以通过多种方式完成。例如,您可以从:

开始
index(":") as $ix | {(.[:$ix]) : .[$ix+1:]}

您显然想要 trim 一些空格,这可以使用 sub/2 来完成。

要组合对象,您可以使用 add。要一次完成此操作,您可以使用 jq -R -s

将它们放在一起,你可能会做得更糟:

def trim: sub("^ +";"") | sub(" +$";"");

def s2o:
  (index(":") // empty) as $ix
  | {(.[:$ix]): (.[$ix+1:]|trim)};

split("\n") | map(s2o) | add