【问题标题】:reference key case insensitively不区分大小写引用键
【发布时间】:2020-06-17 16:37:14
【问题描述】:

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

例如,我可以:

{
  "key" : "value"
}

{
  "kEy" : "value"
}

但不是

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

有没有办法表达.key 过滤器,使其能够捕获"key""kEy"

【问题讨论】:

    标签: json key jq case-insensitive


    【解决方案1】:

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

    with_entries( .key |= ascii_downcase ).key
    

    with_entries(..) 中的 .key 不能与您选择的键名混淆,因为这是在 jq - @987654327 中使用 *entries 函数系列时所有键名的默认名称@、to_entriesfrom_entries

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

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

    jq-play demo

    【讨论】:

    • Inia,如果 JSON 文档具有嵌套键,您知道如何进行这项工作吗?例如,不是简单的.key,而是.key.anotherKey
    【解决方案2】:

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

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

    Online demo

    【讨论】:

      猜你喜欢
      • 2013-03-22
      • 1970-01-01
      • 2012-12-01
      • 2013-03-06
      • 2020-02-18
      • 2014-03-25
      • 1970-01-01
      • 2018-04-19
      • 2014-04-13
      相关资源
      最近更新 更多