假设我有以下 JSON,存储在我的变量 jsonVariable 中。
{
"id": 1,
"details": {
"username": "jamesbrown",
"name": "James Brown"
}
}
我使用以下方法用 jq 解析这个 JSON:
echo $jsonVariable | jq '.details.name | select(.name == "James Brown")'
这会给我输出
詹姆斯布朗
但是如果我也想得到这个人的id怎么办?现在,我知道这是一个粗略而简单的例子——我目前使用的程序有 5 或 6 层深,有许多不同的 JQ 函数而不是选择。在执行各种过滤方法后,当我已经有 5 或 6 层深时,我需要一种方法来选择父字段。
任何人都可以帮忙吗?有没有办法“反向”,回到 parent 身边? (不确定我是否有道理!)
请您参考如下方法:
对于更通用的方法,将“父”元素的值保存在所需的详细级别,然后在过滤器的末尾进行管道传输:jq '. as $parent | .details.name | select(. == "James Brown") | $parent'
当然,对于您公开的微不足道的情况,您可以完全省略这一点:jq 'select(.details.name == "James Brown")'
此外,请考虑到如果您选择的过滤器为单个父对象返回多个匹配项,您将收到每个匹配项的父对象的副本。您可能希望通过将父级别以下的所有匹配项包装到一个数组中来确保您的选择过滤器仅返回父级别的一个元素,或者使用 unique
对最终结果进行去重。 .