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


以上是jq不区分大小写键过滤器的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>