Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/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
Json 如何使用jq将对象键转换为数组_Json_Csv_Jq_Csvtojson - Fatal编程技术网

Json 如何使用jq将对象键转换为数组

Json 如何使用jq将对象键转换为数组,json,csv,jq,csvtojson,Json,Csv,Jq,Csvtojson,我正在尝试转换一个csv,其中标题是键,列中的值是列表 例如,我有以下csv mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21 6 160 110 3.9 2.62 16.46 0 1 4 4 Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1

我正在尝试转换一个csv,其中标题是键,列中的值是列表

例如,我有以下csv

               mpg   cyl  disp  hp   drat  wt     qsec   vs  am  gear  carb
Mazda RX4      21    6    160   110  3.9   2.62   16.46  0   1   4     4
Mazda RX4 Wag  21    6    160   110  3.9   2.875  17.02  0   1   4     4
Datsun 710     22.8  4    108   93   3.85  2.32   18.61  1   1   4     1
我想要以下格式

{
    "field1" : [Mazda RX4 ,Mazda RX4 Wag,Datsun 710],    
    "mpg" : [21,21,22.8],    
    "cyl" : [6,6,6],        
    "disp" : [160,160,108],    
   ...
}
请注意,未引用数值。我假设所有列都具有相同的类型

我正在使用以下
jq
命令

 curl https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/datasets/mtcars.csv  cars.csv | head -n4 | csvtojson | jq '.'
完整工作解决方案
cat | csvtojson | jq'。as$in |将([0]|键_未排序[])减少为$k({};[$k]=($in |映射([k]))
jq播放-将所有数字转换为字符串
这是一个简洁、高效、概念简单的解决方案,它仅基于
map
reduce

. as $in
| reduce (.[0] | keys_unsorted[]) as $k ( {}; .[$k] = ($in|map(.[$k])))
将所有数值字符串转换为数字
这不是相同的转换,但可能会有所帮助:这真的很酷。一个问题。它引用了数字。“field1:[“Mazda RX4”,“Mazda RX4 Wag”],“mpg:[“21”,“21”],“cyl:[“6”,“6”],“disp:[“160”,“160”],`如果字符被引用可以,但是数字不能被引用。如果您想转换整数值字符串,可以使用
tonumber
,但是您没有明确指定这方面的要求(例如,如果原始JSON中的一个键同时具有整数值和非整数值,该怎么办?“简单”?我很想知道你认为什么复杂;JQ-非常有用,但却完全不可理解。也许direct可以更准确地理解我的意思,但由于双行程序实际上只基于两个众所周知的概念(reduce和map),我认为它非常简单,即使语法可能不熟悉。
cat <csv_data> | csvtojson | jq '. as $in | reduce (.[0] | keys_unsorted[]) as $k ( {}; .[$k] = ($in|map(.[$k])))'
. as $in
| reduce (.[0] | keys_unsorted[]) as $k ( {}; .[$k] = ($in|map(.[$k])))
. as $in
| reduce (.[0] | keys_unsorted[]) as $k ( {}; 
    .[$k] = ($in|map(.[$k] | (tonumber? // .))))