可以深度嵌套键时,使用jq从嵌套的json使用键获取值

时间:2018-12-03 10:19:30

标签: sh jq

我有一个嵌套的JSON,如下所示。无论嵌套的深度如何,我都必须列出所有“ .url”的值。

{
 section1: {
  url: "abc/efg/dgh.com",
  name: "test1"
 },
 section2: {
   .section3: {
     url: "efef/dedede/efdgh.com",
     name: "test2"
    }
 }
}

预期输出如下:

["abc/efg/dgh.com", "efef/dedede/efdgh.com"]

预先感谢

1 个答案:

答案 0 :(得分:2)

如果您需要访问“无论嵌套有多深”的内容,那么recurse是您的朋友。

jq '[recurse|.url? // empty]' file.json

当递归到达非对象(例如,叶子字符串)之类的东西时,问号可防止我们失败。并且//empty用没有结果的空值替换我们从没有“ url”键的对象中得到的空值(因此它将删除它们)。