jq不区分大小写键过滤器
从这个“test.json”文件:
{
"key1": "abc",
"key2": "def",
"key3": "ghi"
}
我可以使用以下命令更新“key2”值:
jq '.key2="123"' test.json
但是,有没有办法使用不区分大小写的密钥过滤器并使此命令有效:
jq '.KeY2="123"' test.json
而且...如果在 JSON 文件中找不到密钥,则什么也不做。默认行为是附加搜索到的键。
回答
test(regex; "i")可用于在 jq 中执行不区分大小写的正则表达式匹配。因此:
jq --arg key KeY2 --arg newValue 123 '
[to_entries[] |
if .key | test($key; "i") then
.value = $newValue
else . end
] | from_entries' <test.json
也就是说,由于这是一个正则表达式匹配,您可能需要考虑您的键名如何作为正则表达式 - 锚定等。另一种方法是将两个版本都转换为小写以进行比较:
jq --arg key KeY2 --arg newValue 123 '
($key | ascii_downcase) as $lower_key |
[to_entries[] |
if (.key | ascii_downcase) == $lower_key then
.value = $newValue
else . end
] | from_entries' <test.json