不敏感地引用关键大小写
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
一种方法是将所有键转换为小写作为默认格式并提取您选择的键名(灵感来自此)
with_entries( .key |= ascii_downcase ).key
不要将 with_entries(..)
中的 .key
与您选择的键名混淆,因为这是使用 *entries 函数族时所有键名的默认名称jq
- with_entries
、to_entries
和 from_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 中表达不区分大小写的简单键引用?
例如,我可以:
{
"key" : "value"
}
或
{
"kEy" : "value"
}
但不是
{
"key" : "value",
"kEy" : "value"
}
有没有一种方法可以表达 .key
过滤器,使其能够捕获 "key"
或 "kEy"
?
给定 i
标志,test
内置匹配不区分大小写,您可以将它与 to_entries
结合使用。例如:
to_entries[] | select(.key | test("key"; "i")) .value
一种方法是将所有键转换为小写作为默认格式并提取您选择的键名(灵感来自此
with_entries( .key |= ascii_downcase ).key
不要将 with_entries(..)
中的 .key
与您选择的键名混淆,因为这是使用 *entries 函数族时所有键名的默认名称jq
- with_entries
、to_entries
和 from_entries
如果您的键嵌套在其他对象中,则可以 walk
遍历整个 JSON 以递归地重命名键并获取您选择的字段
def recursive_key_rename:
walk( if type == "object" then with_entries( .key |= ascii_downcase ) else . end);
recursive_key_rename | .key.anotherkey