不敏感地引用关键大小写

reference key case insensitively

如何在 jq 中表达不区分大小写的简单键引用?

例如,我可以:

{
  "key" : "value"
}

{
  "kEy" : "value"
}

但不是

{
  "key" : "value",
  "kEy" : "value"
}

有没有一种方法可以表达 .key 过滤器,使其能够捕获 "key""kEy"

给定 i 标志,test 内置匹配不区分大小写,您可以将它与 to_entries 结合使用。例如:

to_entries[] | select(.key | test("key"; "i")) .value

Online demo

一种方法是将所有键转换为小写作为默认格式并提取您选择的键名(灵感来自此

with_entries( .key |= ascii_downcase ).key

不要将 with_entries(..) 中的 .key 与您选择的键名混淆,因为这是使用 *entries 函数族时所有键名的默认名称jq - with_entriesto_entriesfrom_entries

如果您的键嵌套在其他对象中,则可以 walk 遍历整个 JSON 以递归地重命名键并获取您选择的字段

def recursive_key_rename:
  walk( if type == "object" then with_entries( .key |= ascii_downcase ) else . end);

recursive_key_rename | .key.anotherkey

jq-play demo