Json 当jq遇到某个子值时,找出父键
以下是json: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"
{
"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在一起,这太疯狂了。