【问题标题】:Find parent key based on child value根据子值查找父键
【发布时间】:2020-08-07 12:13:31
【问题描述】:

我有以下 JSON。我想知道“Jan”来自哪个国家(比利时)。

{
    "Belgium": [
        {
            "first_name": "Jan",
            "last_name": "Molenaar"
        },
        {
            "first_name": "Piet",
            "last_name": "Hoogenboom"
        }
    ],
    "Germany": [
        {
            "first_name": "Herman",
            "last_name": "Bret"
        },
        {
            "first_name": "Sanne",
            "last_name": "Klepper"
        }
    ]
}

我发现并尝试了不同的查询,例如:

cat data.json |jq '. as $parent | select(.first_name == "Jan") | $parent'

但很遗憾,我找不到正确的查询。

【问题讨论】:

  • 如果您对另一种(非 jq)方式来实现相同的 JSON 查询感兴趣:jtc -w'<Jan>[-2]<>k'... 和来自比利时的问候 :) PS。碰巧我是jtc unix 工具的开发者
  • C-nan - 如果比利时有多个“Jan”,请说明如何处理。

标签: json jq


【解决方案1】:

以数组的形式获取first_nameJan的条目的路径,并从中提取国家名称。

path(.[][] | select(.first_name == "Jan"))[0]

Online demo

【讨论】:

  • 如果不需要重复,那么在调用 first 时将 arg 包含在 path 中是合适的。
【解决方案2】:

当“Jan”是几个人的名字时,以下内容可防止产生重复,并且比无条件扫描所有“first_name”值的替代方法更有效:

to_entries[] | select( any(.value[]; .first_name=="Jan")).key

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2022-12-10
    相关资源
    最近更新 更多