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

如何用Miller mlr或jq将JSON数组转换为Datagraph兼容格式

用jq/mlr一行命令转换JSON为Datagraph兼容格式

方案一:生成Datagraph原生支持的长表数组格式

使用jq命令

jq -n 'input | to_entries[] | .key as $pair | .value | range(0; .x | length) | {"pair": $pair, "x": .x[.], "y": .y[.]}' input.json

命令说明:

  • to_entries[]:把顶层的交易对(如btcusd)和对应的x/y数据拆成键值条目
  • .key as $pair:暂存当前交易对的名称,后续生成条目时复用
  • range(0; .x | length):遍历x数组的每一个索引位置
  • 对每个索引生成包含交易对名称、对应x值和y值的独立对象

输出示例:

[
  {"pair": "btcusd", "x": 1254700800000, "y": 0.00076394},
  {"pair": "btcusd", "x": 1254787200000, "y": 0.00076394},
  {"pair": "btcusd", "x": 1254873600000, "y": 0.00088456},
  {"pair": "btcusd", "x": 1730419200000, "y": 69513.1578978095},
  {"pair": "xaubtc", "x": 1254700800000, "y": 1316202.8431552218},
  {"pair": "xaubtc", "x": 1254787200000, "y": 1359727.2037070976},
  {"pair": "xaubtc", "x": 1254873600000, "y": 1176008.410961382},
  {"pair": "xaubtc", "x": 1719446400000, "y": 0.037321851310868535}
]

使用mlr命令

mlr --j2j put 'foreach (key, value in $*) { emit({"pair": key, "x": value.x, "y": value.y}) }' then unsparsify then expand -f x,y input.json

命令说明:

  • foreach (key, value in $*):遍历所有顶层交易对,发射包含交易对名称、x数组、y数组的条目
  • unsparsify:确保所有字段统一存在,避免缺失值问题
  • expand -f x,y:把x和y数组按索引展开为多行,每行对应一组x/y值

方案二:生成更直观的宽表格式

使用jq + mlr生成表格

jq -n 'input | to_entries | .[0] as $a | .[1] as $b | range(0; ($a.value.x | length) // ($b.value.x | length)) | {pair1: $a.key, x1: $a.value.x[.], y1: $a.value.y[.], pair2: $b.key, x2: $b.value.x[.], y2: $b.value.y[.]}' input.json | mlr --j2p cat

命令说明:

  • to_entries:把顶层键值对转为条目数组,方便分别获取两个交易对的数据
  • 暂存两个交易对的数据到$a和$b,遍历索引范围(取两个数组长度的最小值)
  • 每个索引对应生成包含两个交易对x/y值的对象,最后用mlr转为易读的表格格式

输出示例:

pair1   x1             y1                pair2   x2             y2
btcusd  1254700800000  0.00076394        xaubtc  1254700800000  1316202.8431552218
btcusd  1254787200000  0.00076394        xaubtc  1254787200000  1359727.2037070976
btcusd  1254873600000  0.00088456        xaubtc  1254873600000  1176008.410961382
btcusd  1730419200000  69513.1578978095  xaubtc  1719446400000  0.037321851310868535

使用mlr单行命令

mlr --j2j put 'foreach (key, value in $*) { for (i in 0:length(value.x)-1) { emit({"index": i, "pair": key, "x": value.x[i], "y": value.y[i]}) } }' then pivot -i index -o pair -v x,y then rename -r '(.*)_x', '$1_x' then rename -r '(.*)_y', '$1_y' then remove -f index input.json | mlr --j2p cat

命令说明:

  • 先遍历每个交易对,为每组x/y值添加索引字段,生成带索引的长表条目
  • pivot -i index -o pair -v x,y:按索引分组,把不同交易对的x/y转为宽表字段
  • 重命名字段为pair1_x、pair1_y格式,最后移除索引字段并转为表格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:39:51