如何在bash中将JSON转换为TSV



我正在尝试将JSON文件从下面的命令转换为CSV格式:

curl -X GET 'https://api.coinex.com/v1/market/kline?market=BCHBTC&type=1min' -H "Accept: application/json"

我尝试了如下jq命令,但没有成功:

jq '.data |to_entries[] | @csv'

jq '.data |to_entries[] | [.key,  (.0|tonumber),(.1|tonumber),(.2|tonumber),(.3|tonumber),(.4|tonumber),(.5|tonumber),(.6|tonumber),(.7|tonumber)   )] | @csv'  

所需输出如下:

1619094720  0.01738857  0.01742868  0.01742868  0.01737360  1.24151689  0.0215974650849251  BCHBTC
1619094780  0.01742823  0.01742913  0.01742913  0.01742807  0.89060000  0.0155215977170000  BCHBTC
1619094840  0.01744941  0.01745423  0.01745423  0.01744941  0.42820000  0.0074724290140000  BCHBTC
1619094900  0.01745458  0.01740857  0.01745458  0.01740857  0.73530000  0.0128245470890000  BCHBTC

jq -r '.data[] | @tsv'解决了问题,谢谢@Inian

不需要to_entries,只需将过滤器直接应用于数组,例如:

jq -r '.data[] | .[0:-1] | map(tonumber) | @tsv'

注意,上面删除了"BCHBTC"文本字段,如注释中peak所示,这可以包含在特殊或运算符(//(中:

jq -r '.data[] | tonumber? // . | @tsv'