有条件地将元素追加到数组
Conditional append a element to an array
这是我的 jq,它只是想构建一个新元素,然后将其追加到数组中,
[.[] | . as { foo: $foo1, bar: $bar1} |
{
names: ([
$foo1 | range(0;length) as $i |
{ key: ($foo1[$i]) }
] + [{ key: $bar1 }])
} |
{
values: .names,
}
]
假设我有一个这样的 json,
{
"foo":[
"key1",
"key2"
],
"bar": "key3"
}
这将生成这样的 json 文件,
[
{
"values": [
{
"key": "key1"
},
{
"key": "key2"
},
{
"key": "key3"
}
]
}
]
但是只有当 $bar 不是空字符串时才应该附加元素,我可以这样做吗?
[.[] | . as { foo1: $foo1, bar1: $bar1 if $bar != ""}
...
或附加时执行,
names: ([
$foo1 | range(0;length) as $i |
{ key: ($foo1[$i]) }
] + [{ key: $bar1 }] | if $bar != "")
在此先感谢您的帮助!
您可以使用 select
过滤掉这种情况
jq '[{values: (.foo + [.bar | select(. != "")]) | map({key:.})}]'
如果.bar == "key3"
,它打印
[
{
"values": [
{
"key": "key1"
},
{
"key": "key2"
},
{
"key": "key3"
}
]
}
]
如果.bar == ""
,它打印
[
{
"values": [
{
"key": "key1"
},
{
"key": "key2"
}
]
}
]
如果.bar
不存在,则打印
[
{
"values": [
{
"key": "key1"
},
{
"key": "key2"
},
{
"key": null
}
]
}
]
如果在后一种情况下您希望获得与 .bar == ""
相同的结果,则在过滤器中将 . != ""
更改为 values != ""
以仅考虑不是 [= 的值21=](或 strings != ""
仅考虑 (non-empty) 字符串并忽略任何其他类型)。
这是我的 jq,它只是想构建一个新元素,然后将其追加到数组中,
[.[] | . as { foo: $foo1, bar: $bar1} |
{
names: ([
$foo1 | range(0;length) as $i |
{ key: ($foo1[$i]) }
] + [{ key: $bar1 }])
} |
{
values: .names,
}
]
假设我有一个这样的 json,
{
"foo":[
"key1",
"key2"
],
"bar": "key3"
}
这将生成这样的 json 文件,
[
{
"values": [
{
"key": "key1"
},
{
"key": "key2"
},
{
"key": "key3"
}
]
}
]
但是只有当 $bar 不是空字符串时才应该附加元素,我可以这样做吗?
[.[] | . as { foo1: $foo1, bar1: $bar1 if $bar != ""}
...
或附加时执行,
names: ([
$foo1 | range(0;length) as $i |
{ key: ($foo1[$i]) }
] + [{ key: $bar1 }] | if $bar != "")
在此先感谢您的帮助!
您可以使用 select
过滤掉这种情况
jq '[{values: (.foo + [.bar | select(. != "")]) | map({key:.})}]'
如果.bar == "key3"
,它打印
[
{
"values": [
{
"key": "key1"
},
{
"key": "key2"
},
{
"key": "key3"
}
]
}
]
如果.bar == ""
,它打印
[
{
"values": [
{
"key": "key1"
},
{
"key": "key2"
}
]
}
]
如果.bar
不存在,则打印
[
{
"values": [
{
"key": "key1"
},
{
"key": "key2"
},
{
"key": null
}
]
}
]
如果在后一种情况下您希望获得与 .bar == ""
相同的结果,则在过滤器中将 . != ""
更改为 values != ""
以仅考虑不是 [= 的值21=](或 strings != ""
仅考虑 (non-empty) 字符串并忽略任何其他类型)。