json 根据内容提取节点

bvjxkvbb  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(138)

我有一个如下所示的json文件

[
  [
    16876,
    {
      "/Type": {
        "N": "/Pages"
      },
      "/Count": {
        "I": 68
      },
      "/Kids": [
        16872,
        16847
      ],
      "/Parent": 16877
    }
  ],
  [
    16877,
    {
      "/Type": {
        "N": "/Pages"
      },
      "/Count": {
        "I": 1604
      },
      "/Kids": [
        16873,
        16874,
        16875,
        16876
      ]
    }
  ],
  [
    168, []
  ]
...
]

我想提取带有/Type /Pages.的节点,并显示/Parent和/Kids沿着每个节点的第一个数字。在上面的示例中,输出应该如下所示,其中是一个制表符。

16876<TAB>16877<TAB>16872,16847
16877<TAB><TAB>16873,16874,16875,16876

如何执行此提取?

c2e8gylq

c2e8gylq1#

使用select进行筛选,然后组成一个项目数组,并使用@tsv对其进行转换:

jq -r '
  .[] | select(.[1] | objects."/Type".N == "/Pages")
  | [.[0], .[1]."/Parent", (.[1]."/Kids" | join(","))]
  | @tsv
'
16876   16877   16872,16847
16877       16873,16874,16875,16876

Demo
编辑:在select过滤器中使用objects允许第二个项不是对象的情况。此实现会自动忽略这样的第二个非对象项。例如,替代方法可以考虑找到的第一个对象项,而不管其索引位置。请指定您的要求。

相关问题