Json 在查询其子节点时返回带有jq的父节点
想知道在查询子“Id”时是否可以从下面的json返回父“Id” 如果我查询子id“abc”,它应该返回“parent123” 做一些类似于:Json 在查询其子节点时返回带有jq的父节点,json,bash,shell,unix,jq,Json,Bash,Shell,Unix,Jq,想知道在查询子“Id”时是否可以从下面的json返回父“Id” 如果我查询子id“abc”,它应该返回“parent123” 做一些类似于: more jsonfile | jq '.DistributionList.Items[].Origins.Items[] | select(.Id == "abc") | .Id' 将只返回“abc”->但我需要父id。 不确定是否有办法使用jq执行此操作过滤器: .. | 对象|选择(.Origins.Items[]?|.Id==“abc”)|.Id
more jsonfile | jq '.DistributionList.Items[].Origins.Items[] | select(.Id == "abc") | .Id'
将只返回“abc”->但我需要父id。
不确定是否有办法使用jq执行此操作过滤器:
.. | 对象|选择(.Origins.Items[]?|.Id==“abc”)|.Id
产生:
"parent123"
您可能希望参数化过滤器,例如:
def parent(child):
.. | objects | select( .Origins.Items[]? | .Id == child) | .Id ;
原始问题中的过滤器接近解决方案。只需重新排列
选择中的内容即可。例如
.DistributionList.Items[]
| select(.Origins.Items[].Id == "abc")
| .Id
如果不使用jq,像这样的东西怎么样:grep-oP'(?@ritesht93我只是在我的mac下用这个命令得到一个grep使用帮助文本more filename | jq'.| objects | select(.origines.Items[]?|.Id==“xxx”)|.Id'
完成了这个技巧,谢谢。
.DistributionList.Items[]
| select(.Origins.Items[].Id == "abc")
| .Id