根据块中另一个属性的值获取名称值

Don*_*onJ 3 json jq

使用jq,我想获取块的“name”值,其中“Media”属性(在.session.attributeList下)包含“node7000”字符串(在示例中,json第一个数组块与其匹配 - 有两个匹配:

“值”:“节点7000”

"value": "node7000 和 node8000"

预期 jq 输出为:

“17200站”

[{
    "name": "Station 17200",
    "attributes": [{
            "name": "EnableLog",
            "value": "1"
        }, {
            "name": "LogFont",
            "value": "0"
        }, {
            "name": "IdleTimer",
            "value": "30"
        }
    ],
    "session": [{
            "attributeList": [{
                    "name": "Launch",
                    "value": "1"
                }, {
                    "name": "Media",
                    "value": "node7000"
                }
            ]
        }, {
            "attributeList": [{
                    "name": "Group",
                    "value": "1"
                }, {
                    "name": "RMedia",
                    "value": "1"
                }
            ]
        }, {
            "attributeList": [{
                    "name": "Launch",
                    "value": ""
                }, {
                    "name": "Media",
                    "value": "node7000 and node8000"
                }
            ]
        }
    ]
},
{
    "name": "Station 17300",
    "attributes": [{
            "name": "EnableLog",
            "value": "1"
        }, {
            "name": "LogFont",
            "value": "0"
        }, {
            "name": "IdleTimer",
            "value": "30"
        }
    ],
    "session": [{
            "attributeList": [{
                    "name": "Launch",
                    "value": "1"
                }, {
                    "name": "Media",
                    "value": "node6000"
                }
            ]
        }, {
            "attributeList": [{
                    "name": "Group",
                    "value": "1"
                }, {
                    "name": "RMedia",
                    "value": "1"
                }
            ]
        }, {
            "attributeList": [{
                    "name": "Launch",
                    "value": ""
                }, {
                    "name": "Media",
                    "value": "node6001"
                }
            ]
        }
    ]
}]
Run Code Online (Sandbox Code Playgroud)

Rom*_*est 7

jq解决方案:

jq '.[] | select([.session[].attributeList[] 
                   | .name == "Media" and (.value | contains("node7000"))
                 ] | any ).name' jsonfile
Run Code Online (Sandbox Code Playgroud)
  • .[]- 迭代输入数组的所有元素(对象)
  • select(<condition>)<condition>- 如果返回该输入,则该函数将不改变其输入true,否则不产生输出
  • contains(element)- 过滤器生成true是否element完全包含在输入中
  • any- 过滤器将布尔值数组作为输入,true如果数组中的任何元素为true

输出:

"Station 17200"
Run Code Online (Sandbox Code Playgroud)