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