说我有以下JSON,存储在我的变量 jsonVariable中 。
{ "id": 1, "details": { "username": "jamesbrown", "name": "James Brown" } }
我使用以下命令通过jq解析此JSON:
echo $jsonVariable | jq '.details.name | select(.name == "James Brown")'
这会给我输出
詹姆斯·布朗
但是,如果我也想获得此人的身份证怎么办?现在,我知道这是一个粗糙且简单的示例- 目前正在使用的程序深度为5或6级,除了select以外还具有许多其他JQ函数。在执行各种过滤方法之后,当我已经深达5或6层时,我需要一种选择父母字段的方法。
有人可以帮忙吗?有什么办法可以“逆转”,回到父母身边吗?(不确定我是否有意义!)
对于更通用的方法,将“父”元素的值保存在所需的详细信息级别,然后将其通过管道传递到过滤器的末尾:
jq '. as $parent | .details.name | select(. == "James Brown") | $parent'
当然,对于您暴露的琐碎情况,您可以完全省略以下内容:
jq 'select(.details.name == "James Brown")'
另外,请考虑,如果您选择的过滤器为单个父对象返回了许多匹配项,则您将为每个匹配项收到一个父对象的副本。您可能希望通过将父级以下的所有匹配项包装到一个数组中,或使用来对最终结果进行重复数据删除,以确保您的选择过滤器仅在父级返回一个元素unique。
unique