当前位置: 首页 > 面试题库 >

jq-当我已经深入对象的子级时,如何打印该对象的父级值?

越英范
2023-03-14
问题内容

说我有以下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



 类似资料:
  • 问题内容: 在我的应用中,我必须经常在两种布局之间切换。错误在下面发布的布局中发生。 第一次调用布局时,没有发生任何错误,一切都很好。然后,当我调用不同的布局(空白),然后再次调用我的布局时,出现以下错误: 我的布局代码如下所示: 我知道之前曾有人问过这个问题,但对我来说没有帮助。 问题答案: 错误消息说明你应该做什么。

  • 问题内容: 在下面的函数中,我获得带有属性的textarea对象。 此处,嵌套解构使用和变量。但是变量不起作用。 问题答案: 第一个解构仅创建和变量。如果要创建为变量,则需要再次声明。 您可以在Babel编译器上对其进行测试: 这段代码: 被转移到: 如您所见,未创建变量。

  • 当我读到cascade和inverse时,有人说它们都在做完全不同的事情。级联:在级联中,在一个操作(保存、更新和删除)完成后,它决定是否需要调用其他操作(保存、更新和删除)对其他相互有关系的实体。反向:这用于决定哪一方是管理关系的关系所有者(插入或更新外键列)。 假设我保存有一些孩子的父级。所以当我一方面用inverse="true"cascade="all"设置一对多时,我希望孩子是关系的所有

  • 问题内容: 我有一个以前被保留的实体,并且与另一个实体有关系。为了添加新实体,我只需将新实体添加到托管对象中,并用于保留更改。有没有一种方法可以获取新创建的对象的ID或获取我用于合并以更新其ID的原始(非托管)对象? 在伪代码中,我希望发生以下情况: 将为合并实体返回新副本 旧副本将针对新实体进行更新 示例:父级A,id = 13子级B,id = 0 从本质上讲,我想在父级上发布a ,但在子级上级

  • 请帮助将此类型打印为格式?

  • 我正在寻找为json对象中的所有字段打印jsonpath的Java API。需求的第一部分是,对于给定的json对象(或字符串)- 它应该以key-value的方式打印所有属性,其中key是字段的jsonpath。 输出应该如下所示- 等等。这将用于匹配来自另一个json对象的值(我的第二个需求)。 我找到了一个APIhttps://github.com/json-path/JsonPath,它有