用另一个字段的值替换 jq 中 select 命令的空值
Replace null values from a select command in jq with the value of another field
目标是搜索 part_description 的空值并插入部分字段值。
[
{
"part": "brake-01982",
"part_description": null,
}
]
预期输出
[
{
"part": "brake-01982",
"part_description": "brake-01982",
}
]
命令:
jq '(.[] | select(.part_description==null).part_description) |= .part'
结果没有变化
如果我尝试插入一个字符串值,它会起作用。双引号字符串会产生我所期望的结果。下面的演示。我如何将另一个字段值传递给此命令而不是带引号的字符串?
命令:jq'(.[] | select(.part_description==null).part_description) |= "测试"'
输出
[
{
"part": "brake-01982",
"part_description": "test"
}
]
备选运算符 //
保留第一个值,除非它是 null
、false
或 empty
(即缺失),在这种情况下它会承担第二。结合更新运算符 |=
,这可以收缩为 //=
.
jq '.[] |= (.part_description //= .part)'
[
{
"part": "brake-01982",
"part_description": "brake-01982"
}
]
编辑:要严格仅在 null
的情况下进行更新,即保留 false
的值,并且在缺少字段时不创建该字段,过滤器需要明确检查null
:
jq '.[] |= ((select(has("part_description")).part_description | select(. == null)) = .part)'
[
{
"part": "brake-01982",
"part_description": "brake-01982"
}
]
Goal is to search for null values of part_description ....
如果这确实是目标,那么您需要测试 null
而不是依赖 //
或 //=
。所以你可以写:
map( if has("part_description") and .part_description == null
then .part_description = .part else . end )
目标是搜索 part_description 的空值并插入部分字段值。
[
{
"part": "brake-01982",
"part_description": null,
}
]
预期输出
[
{
"part": "brake-01982",
"part_description": "brake-01982",
}
]
命令: jq '(.[] | select(.part_description==null).part_description) |= .part'
结果没有变化
如果我尝试插入一个字符串值,它会起作用。双引号字符串会产生我所期望的结果。下面的演示。我如何将另一个字段值传递给此命令而不是带引号的字符串?
命令:jq'(.[] | select(.part_description==null).part_description) |= "测试"'
输出
[
{
"part": "brake-01982",
"part_description": "test"
}
]
备选运算符 //
保留第一个值,除非它是 null
、false
或 empty
(即缺失),在这种情况下它会承担第二。结合更新运算符 |=
,这可以收缩为 //=
.
jq '.[] |= (.part_description //= .part)'
[
{
"part": "brake-01982",
"part_description": "brake-01982"
}
]
编辑:要严格仅在 null
的情况下进行更新,即保留 false
的值,并且在缺少字段时不创建该字段,过滤器需要明确检查null
:
jq '.[] |= ((select(has("part_description")).part_description | select(. == null)) = .part)'
[
{
"part": "brake-01982",
"part_description": "brake-01982"
}
]
Goal is to search for null values of part_description ....
如果这确实是目标,那么您需要测试 null
而不是依赖 //
或 //=
。所以你可以写:
map( if has("part_description") and .part_description == null
then .part_description = .part else . end )