【发布时间】:2021-10-20 04:04:19
【问题描述】:
我有一个排序的数组列表,我希望根据数组上一次迭代中 json bool 的值做出格式化决定。代码示例使用 igroup 的当前值,但我需要在 igroup=true 的第一个实例上有一个 MARK,然后所有后续 igroup=true 为 SPACE。为此,我需要知道 igroup 的先前值是什么。尝试记住 prev 值似乎是一个变量,所以我不知道如何实现这一点。
代码:
.result
| keys[] as $c
|
(
(.[$c].segments[0].lines | keys[]) as $l |
[
"line format",
( if .[$c].segments[0].lines[$l].igroup then "SPACE"
else "MARK" end ),
( [ .[$c].segments[0].lines[$l].products[].name ] | join(",")),
"end line format"
]
),
["END","0"]
| join("|")
示例数据:
{
"result": [
{
"cn": "abc",
"segments": [
{
"lines": [
{
"igroup": false,
"products": [
{
"name": "Should be MARK"
}
]
},
{
"igroup": false,
"products": [
{
"name": "Should be MARK"
},
{
"name": "Addon to MARK"
}
]
},
{
"igroup": true,
"products": [
{
"name": "Should be MARK First igroup=true BROKEN!!!"
}
]
},
{
"igroup": true,
"products": [
{
"name": "Should be SPACE !! After first igroup=true"
}
]
},
{
"igroup": true,
"products": [
{
"name": "Should be SPACE until next igroup=false"
}
]
},
{
"igroup": false,
"products": [
{
"name": "Should be MARK"
}
]
}
]
}
]
}
],
"id": 1
}
输出:
"line format|MARK|Should be MARK|end line format"
"line format|MARK|Should be MARK,Addon to MARK|end line format"
"line format|SPACE|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"
【问题讨论】:
-
一种方法是使用
foreach。如果您无法弄清楚,请按照minimal reproducible example 指南简化并澄清您的问题。