字符串数组上的字符串替换
String substitution on array of strings
我正在尝试从字符串数组中删除一个子字符串;该数组作为键集从地图中获取。一些传入数据示例:
{
"appOneVersion": "1.0",
"appTwoVersion": "1.0",
"appThreeVersion": "1.0"
}
首先我提取密钥集并制作小写字母:
$ jq -r 'with_entries( .key |= ascii_downcase) | keys' example.json
[
"apponeversion",
"appthreeversion",
"apptwoversion"
]
然后我试图用 sub("version$"; "")
去除每个元素的 version
部分但是我不太明白如何让它遍历数组而不是 sub
尝试对整个数组进行操作:
$ jq -r 'with_entries( .key |= ascii_downcase) | keys | sub("version$"; "")' example.json
jq: error (at example.json:5): array (["apponever...) cannot be matched, as it is not a string
看起来 map
可以解决问题,您也可以考虑 keys_unsorted
:
with_entries( .key |= ascii_downcase )
| keys_unsorted | map(sub("version$"; ""))
当然还有其他方法....
如果你想保留原来的结构:
with_entries( .key |= (ascii_downcase | sub("version$";"")))
我正在尝试从字符串数组中删除一个子字符串;该数组作为键集从地图中获取。一些传入数据示例:
{
"appOneVersion": "1.0",
"appTwoVersion": "1.0",
"appThreeVersion": "1.0"
}
首先我提取密钥集并制作小写字母:
$ jq -r 'with_entries( .key |= ascii_downcase) | keys' example.json
[
"apponeversion",
"appthreeversion",
"apptwoversion"
]
然后我试图用 sub("version$"; "")
去除每个元素的 version
部分但是我不太明白如何让它遍历数组而不是 sub
尝试对整个数组进行操作:
$ jq -r 'with_entries( .key |= ascii_downcase) | keys | sub("version$"; "")' example.json
jq: error (at example.json:5): array (["apponever...) cannot be matched, as it is not a string
看起来 map
可以解决问题,您也可以考虑 keys_unsorted
:
with_entries( .key |= ascii_downcase )
| keys_unsorted | map(sub("version$"; ""))
当然还有其他方法....
如果你想保留原来的结构:
with_entries( .key |= (ascii_downcase | sub("version$";"")))