【问题标题】:How convert JSON to TSV in bash如何在 bash 中将 JSON 转换为 TSV
【发布时间】:2021-07-16 18:51:04
【问题描述】:

我正在尝试将 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

【问题讨论】:

  • 那不是 CSV,您在寻找制表符分隔的输出吗? jq -r '.data[] | @tsv' 是你要找的吗?
  • 'jq -r '.data[] | @tsv' ' 解决了这个问题,非常感谢。
  • 这能回答你的问题吗? How to format a JSON string as a table using jq?
  • 是的,它回答了这个问题。

标签: node.js csv curl jq


【解决方案1】:

jq -r '.data[] | @tsv ' 解决了这个问题,谢谢@ 伊尼安

【讨论】:

  • 请不要添加“谢谢”作为答案。它们实际上并没有提供问题的答案,并且可能被未来的访问者视为噪音。一旦你earn足够reputation,你将获得upvote answers你喜欢的特权。这样,问题的未来访问者将看到对该答案的更高投票数,并且回答者也将获得声誉积分。
【解决方案2】:

不需要to_entries,直接对数组应用过滤器即可,例如:

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

请注意,上面删除了 "BCHBTC" 文本字段,正如 cmets 中的 peak 所指出的,这可以包含在特殊的或运算符中 (//):

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

【讨论】:

  • 为什么要切片?
  • @peak: 否则tonumber 会抱怨,反正删除的文本字段很容易变得多余
  • 鉴于 OP 已确认要保留文本字段,您可以使用 tonumber? // .
  • @peak:很好,我不知道你可以像这样使用// 运算符。我已包含您的建议
  • 你仍然需要map,但如果使用@tsv,它几乎没有什么实际区别。
猜你喜欢
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
相关资源
最近更新 更多