You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套JSON转CSV:基于jq实现订单簿快照数据格式化需求

订单簿JSON转CSV的问题解决

需求梳理

一开始想把订单簿里的每条bid、ask记录拆成单独行,但现有jq脚本生成了多余空行;后来需求调整为只提取最高出价(bid)和最低要价(ask),生成单行无表头CSV,还要兼容bid或ask缺失的情况。

最终优化后的jq脚本

假设订单簿JSON结构如下(bids按价格降序、asks按价格升序排列,子数组格式为[价格, 数量]):

{
  "bids": [["100.5", "2.0"], ["99.8", "5.0"]],
  "asks": [["101.2", "3.0"], ["101.5", "1.5"]]
}

用以下脚本处理即可:

[
  ( .bids[0] // ["", ""] ),
  ( .asks[0] // ["", ""] )
] | flatten | @csv

脚本细节说明

  • .bids[0] // ["", ""]:直接取第一个bid(也就是最高出价),如果bids数组为空或者不存在,就用空字符串占位
  • .asks[0] // ["", ""]:同理,取第一个ask(最低要价),缺失时用空字符串补位
  • flatten:把嵌套的数组展开成一维结构,方便转CSV
  • @csv:将数组直接格式化为无表头的CSV行

测试验证

  1. 完整数据场景:
    输入示例JSON,输出:
"100.5","2.0","101.2","3.0"
  1. 缺失bids场景:
    输入:
{"asks": [["101.2", "3.0"]]}

输出:

"","","101.2","3.0"
  1. 缺失asks场景:
    输入:
{"bids": [["100.5", "2.0"]]}

输出:

"100.5","2.0","",""

原需求(拆分所有bid/ask到单行)的冗余行解决

如果后续还要回到最初拆分所有记录的需求,避免多余行的关键是跳过空字段:

(.bids[]? | [., "bid"]) + (.asks[]? | [., "ask"]) | flatten | @csv
  • []?:遇到空数组或不存在的字段直接跳过,不会生成空行
  • 额外加"bid"/"ask"标记区分报价类型,最后展开转CSV

内容的提问来源于stack exchange,提问作者SteamedUp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:45:12