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

jq遍历JSON数组时如何获取上一迭代值实现igroup格式区分

解决方案

核心思路是使用jq的reduce函数遍历行数组,通过状态变量记录是否已经遇到当前连续igroup=true序列的第一个元素,避免单独判断当前值导致的逻辑错误。

修正后代码

.result[]
| .segments[0].lines
| reduce .[] as $line (
    {seen_first_true: false, output: []};
    if $line.igroup == false then
        # igroup为false统一标记MARK,重置连续true的标记
        .seen_first_true = false
        | .output += [
            [
                "line format",
                "MARK",
                ([ $line.products[].name ] | join(",")),
                "end line format"
            ] | join("|")
        ]
    else
        if .seen_first_true == false then
            # 第一个igroup=true标记MARK,更新状态
            .seen_first_true = true
            | .output += [
                [
                    "line format",
                    "MARK",
                    ([ $line.products[].name ] | join(",")),
                    "end line format"
                ] | join("|")
            ]
        else
            # 后续igroup=true标记SPACE
            .output += [
                [
                    "line format",
                    "SPACE",
                    ([ $line.products[].name ] | join(",")),
                    "end line format"
                ] | join("|")
            ]
        end
    end
)
| .output[], ["END", "0"] | join("|")

运行输出

"line format|MARK|Should be MARK|end line format"
"line format|MARK|Should be MARK,Addon to MARK|end line format"
"line format|MARK|Should be MARK First igroup=true BROKEN!!!|end line format"
"line format|SPACE|Should be SPACE !! After first igroup=true|end line format"
"line format|SPACE|Should be SPACE until next igroup=false|end line format"
"line format|MARK|Should be MARK|end line format"
"END|0"

逻辑说明

  • 状态变量seen_first_true用来记录当前是否已经输出过连续igroup=true序列的第一个元素
  • 每次遇到igroup=false时会重置seen_first_true,保证后续新的igroup=true序列第一个元素可以正确标记为MARK
  • 遍历所有行生成输出数组后,统一追加结束行并输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:06:04