【问题标题】:jq - find a value of a non-unique key when another value is knownjq - 当另一个值已知时,找到一个非唯一键的值
【发布时间】:2020-09-15 14:00:30
【问题描述】:

当另一个键的值已知时,我正在努力为 jq 构建一个适当的过滤器以查找特定键的值。

这是json文件:

[
    {
        "Header": {
            "Tenant": "TenantX",
            "Rcode": 200
        },
        "Body": {
            "values": [
                {
                    "id": "aaaa0001-0a0a-0b0b-0a95-6625bef115e5",
                    "name": "Attribute1"
                },
                {
                    "id": "aaaa0001-0a0a-0b0b-9926-f5dc47d312dd",
                    "name": "Attribute2"
                },
                {
                    "id": "aaaa0001-0a0a-0b0b-aea9-6b39641a0695",
                    "name": "Attribute3"
                },
                {
                    "id": "aaaa0001-0a0a-0b0b-a62b-5b26838eeca7",
                    "name": "Attribute4"
                }
            ]
        }
    }
]

我的目标 - 对于“name”键的任何给定值,在同一 {} 块中找到“id”键的值。或者以伪代码/任务为例:

When Header.Tenant ==="TenantX" and Body.values[].name =="Attribute1" 
then
display the value of "id"  
in the same block where "Attribute1" is

"id""name" 的值是唯一的,但名称/id 组合在 Body.values[] 数组中的位置可以是任何位置。换句话说,对于一个租户Attribute1 可以在数组的第一个元素中,而对于另一个租户 - 在第 10 个。此外,一些租户可以在数组中拥有特定的name/id,而其他租户则没有。

我想如果我能找到数组中给定属性的唯一位置n - Body.values[n].name,那么Body.values[n].id 应该会给我答案,对吧?

谢谢

【问题讨论】:

    标签: arrays json sorting jq


    【解决方案1】:

    您可以使用

    获取values数组中的所有对象
    .[].Body.values[]
    

    然后选择name与您的字符串匹配的对象中的id

    .[].Body.values[] | select(.name == "Attribute1").id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多