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

如何用jq将数组奇偶索引元素转为键值对并解析Solr 6.5指标?

解决Solr 6.5指标数组的奇偶元素配对问题

嗨,我完全懂你要处理的这个需求!把Solr指标数组里的奇偶位置元素配对成键值对对象,确实是jq处理数组时很典型的场景,你猜的没错,map或者类似的遍历操作是核心,我给你两种靠谱的实现方法:

方法一:用_nwise快速分组(推荐)

如果你的jq版本支持_nwise(Solr 6.5对应的环境一般都支持),这是最简洁的写法。它能直接把数组按指定长度分组,刚好适配我们“每两个元素一组”的需求。

假设你的Solr指标数据结构大概是这样:

{
  "metrics": [
    "solr.core.search.queryTime", 123,
    "solr.core.search.requests", 456,
    "solr.core.cache.hits", 789
  ]
}

对应的jq命令如下:

.metrics | _nwise(2) | map({(.[0]): .[1]}) | add

拆解每个步骤:

  • .metrics:先提取出指标数组
  • _nwise(2):把数组拆成每两个元素一组的子数组,结果会变成:
    [["solr.core.search.queryTime",123], ["solr.core.search.requests",456], ["solr.core.cache.hits",789]]
    
  • map({(.[0]): .[1]}):遍历每个子数组,将第一个元素作为键、第二个作为值生成单个对象,比如每个子数组会变成{"solr.core.search.queryTime":123}
  • add:把所有小对象合并成一个完整的键值对对象

最终输出会是:

{
  "solr.core.search.queryTime": 123,
  "solr.core.search.requests": 456,
  "solr.core.cache.hits": 789
}

方法二:用reduce兼容旧版jq

如果你的jq版本比较旧,不支持_nwise,可以用reduce来手动遍历偶数索引的元素,逐一构建对象:

.metrics | reduce range(0; length; 2) as $i ({}; . + {(.[$i]): .[$i+1]})

逻辑说明:

  • range(0; length; 2):生成从0开始、步长为2的索引序列(也就是所有偶数位置的索引)
  • reduce ... ({}; ...):从空对象{}开始,每次把当前索引$i对应的元素作为键,$i+1对应的元素作为值,添加到结果对象中

小提示

如果你的指标数组长度是奇数(比如最后多了一个无对应值的元素),可以先处理一下数组:

.metrics | if length % 2 == 1 then .[:-1] else . end | _nwise(2) | map({(.[0]): .[1]}) | add

这段代码会自动去掉最后一个孤立的元素,避免配对出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:18:49