`query |= transform` 用于根据键修改对象值
`query |= transform` for modifying object values based on keys
如果你想修改数组中某些元素的值,你可以使用类似
的东西
ARRAY |= map( if FILTER then TRANSFORM else . end )
或
ARRAY[] |= if FILTER then TRANSFORM else . end
不过,我喜欢 QUERY |= TRANSFORM
模式。
( ARRAY[] | select( FILTER ) ) |= TRANSFORM
所有这些也适用于对象(使用 map_value
而不是 map
),只要过滤器仅取决于元素值。但是,如果过滤器依赖于密钥怎么办?我可以想出解决方案,例如
OBJECT |= with_entries( if .key | FILTER then .value |= TRANSFORM else . end )
但是在那种情况下,有没有办法得到 QUERY |= TRANSFORM
形式的东西?
具体例子
.o |= with_entries( if .key | tonumber? // false then .value |= . + 100 else . end )
{
"o": {
"a": 3,
"b": 4,
"1": 3,
"2": 4
}
}
{
"o": {
"a": 3,
"b": 4,
"1": 103,
"2": 104
}
}
Demo 在 jqplay
如果你想修改数组中某些元素的值,你可以使用类似
的东西ARRAY |= map( if FILTER then TRANSFORM else . end )
或
ARRAY[] |= if FILTER then TRANSFORM else . end
不过,我喜欢 QUERY |= TRANSFORM
模式。
( ARRAY[] | select( FILTER ) ) |= TRANSFORM
所有这些也适用于对象(使用 map_value
而不是 map
),只要过滤器仅取决于元素值。但是,如果过滤器依赖于密钥怎么办?我可以想出解决方案,例如
OBJECT |= with_entries( if .key | FILTER then .value |= TRANSFORM else . end )
但是在那种情况下,有没有办法得到 QUERY |= TRANSFORM
形式的东西?
具体例子
.o |= with_entries( if .key | tonumber? // false then .value |= . + 100 else . end )
{
"o": {
"a": 3,
"b": 4,
"1": 3,
"2": 4
}
}
{
"o": {
"a": 3,
"b": 4,
"1": 103,
"2": 104
}
}
Demo 在 jqplay