Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jq从文本输入中嵌套json_Json_Bash_Shell_Converter_Jq - Fatal编程技术网

使用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?/)

输出