使用jq从文本输入中嵌套json
我有文本数据,看起来像(以空格分隔的代码段): 第一行是标题:使用jq从文本输入中嵌套json,json,bash,shell,converter,jq,Json,Bash,Shell,Converter,Jq,我有文本数据,看起来像(以空格分隔的代码段): 第一行是标题: name type input file th repeatNumber S1 class [12,7,6,19] sfile1 -10 2 S2 class [12,7,6,19] sfile2 -5 1 S3 bottom [12,7,16] sfile3 -15 1 使用shell脚本或命令行(最好使用jq)希望将其转换为一个嵌套json,如下所示: 'dets':{ 'S1':{ 't
name type input file th repeatNumber
S1 class [12,7,6,19] sfile1 -10 2
S2 class [12,7,6,19] sfile2 -5 1
S3 bottom [12,7,16] sfile3 -15 1
使用shell脚本或命令行(最好使用jq)希望将其转换为一个嵌套json,如下所示:
'dets':{
'S1':{
'type':'class',
'input': [12,7,6,19],
'config':{
'file':'sfile1',
'th': -10
}
},
'S2':{
'type':'class',
'input': [12,7,6,19],
'config':{
'file':'sfile2',
'th': -5
}
},
'S3':{
'type':'bottom',
'input': [12,7,16],
'config':{
'file':'sfile3',
'th': -15
}
}
}
使用jq解决问题的适当方法与使用
awk
的方法基本相同:对于每个输入行(第一行除外),解析它并发出相应的JSON对象。为了清楚起见,让我们定义一个函数来处理每个输入行(作为字符串读入):
解决办法很简单:
{ dets: [inputs | parse] | add }
jq的适当调用如下所示:
jq -R -f program.jq input.txt
请注意,此处省略-n
命令行选项会产生跳过标题行的效果
此调用将生成如下所示的JSON。请注意,问题中显示为JSON的文本严格来说不是JSON,但既然声明的目标是生成JSON,我们就到此为止
警告
上述解决方案做出了各种假设,尤其是:
1) 字段在匹配正则表达式“+”的意义上是“空间分隔的”;特别是,假设阵列没有任何嵌入空间。
2) “输入”字段可以使用fromjson
解析;如果对此有任何疑问,请使用(fromjson?/)
输出
使用jq解决问题的适当方法与使用
awk
的方法基本相同:对于每个输入行(第一行除外),解析它并发出相应的JSON对象。为了清楚起见,让我们定义一个函数来处理每个输入行(作为字符串读入):
解决办法很简单:
{ dets: [inputs | parse] | add }
jq的适当调用如下所示:
jq -R -f program.jq input.txt
请注意,此处省略-n
命令行选项会产生跳过标题行的效果
此调用将生成如下所示的JSON。请注意,问题中显示为JSON的文本严格来说不是JSON,但既然声明的目标是生成JSON,我们就到此为止
警告
上述解决方案做出了各种假设,尤其是:
1) 字段在匹配正则表达式“+”的意义上是“空间分隔的”;特别是,假设阵列没有任何嵌入空间。
2) “输入”字段可以使用fromjson
解析;如果对此有任何疑问,请使用(fromjson?/)
输出