我有一个带两个变量的while循环,我必须合并成一个JSON片段,如下所示:
#!/bin/bash
while read -r from to
do
# BONUS: Solution would ideally require no quoting at this point
echo { \"From\": \"$from\", \"To\": \"$to\" }
done << EOF
foo bar
what ever
EOF它当前输出无效的JSON:
{ "From": "foo", "To": "bar" }
{ "From": "what", "To": "ever" }最简单的方法是创建有效的JSON,如:
[
{ "From": "foo", "To": "bar" },
{ "From": "what", "To": "ever" }
]我看了看jq,但我想不出怎么做。理想情况下,我不是looking to do it in shell,因为我觉得添加逗号有点难看。
发布于 2016-12-11 03:29:29
下面是一个所有jq解决方案,该解决方案假定"From“和"To”值与您的示例完全相同:
jq -R -n '[inputs | split(" ") | {From: .[0], To: .[1]}]'您可能希望使用gsub/2处理其他空间。
如果您的jq没有inputs,那么您可以使用以下咒语:
jq -R -s 'split("\n")
| map(select(length>1) | split(" ") | {From: .[0], To: .[1]})'或者,您可以将时间循环的输出输送到jq -s中。
https://stackoverflow.com/questions/41082241
复制相似问题