Json 当jq遇到某个子值时,找出父键

Json 当jq遇到某个子值时,找出父键,json,jq,Json,Jq,以下是json: { "vendors": { "vendor1": { "vendor_version": "LS TT1706-POL", "vendor_name": "toyota" }, "vendor2": { "vendor_version": "LSGS-2002-RC", "vendor_name": "honda"

以下是json:

{
    "vendors": {
        "vendor1": {
            "vendor_version": "LS TT1706-POL",
            "vendor_name": "toyota"
        },
        "vendor2": {
            "vendor_version": "LSGS-2002-RC",
            "vendor_name": "honda"
        },
        "vendor3": {
            "vendor_version": "LS1903",
            "vendor_name": "suzuki"
        }
    }
}
当我得到LSGS-2002-RC时,我基本上需要jq表达式来得到“vendor2”。我尝试过使用select、map、变量以及它们的每一种组合。 以下是一些不起作用的东西:

jq-r'.vendors|to_entries[]|.value |选择(.vendor_version==“LSGS-2002-RC”)

基本上,我总是以vendor1、vendor2等键结束。。。剥去


我有点不知所措。请注意,json结构或值不能更改。谢谢

您几乎拥有了它,但是正确的过滤器应该是使用
.value.vendor\u版本
上的
select()
函数并选择密钥名称

jq -r '.vendors | to_entries[] | select(.value.vendor_version=="LSGS-2002-RC").key'
另外,不要将动态字符串传递给函数,请使用占位符(如变量)

jq -r --arg vendor "LSGS-2002-RC" '.vendors | to_entries[] | select(.value.vendor_version == $vendor).key'
select()
相比,另一种可读性较差的版本是使用
键[]

.vendors | keys[] as $k | if .[$k].vendor_version == "LSGS-2002-RC" then $k else empty end

回答得很好,伊尼安人。我简化了发布问题,但使用了env变量。我总是花那么多时间和jq在一起,这太疯狂了。