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

时间:2017-05-17 03:04:32

标签: json bash sh text-processing jq

如何将这两个文本字符串转换为单个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

1 个答案:

答案 0 :(得分:1)

如上所述,例如在Use jq to turn x=y pairs into key/value pairs,转换键:值字符串的基本任务可以通过多种方式完成。例如,您可以从:

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

您显然想要修剪一些空格,这可以使用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