如何使用jq解析一个JSON对象数组

3

我可以帮助您翻译一些与IT技术相关的内容。以下是需要翻译的内容:

我需要解析一个包含许多数组的Json文件。

这是Json源代码:

{
"iabVersion": "IAB_V2",
"categories": [{
    "categories": [{
        "categories": [{
            "id": "1.1.1",
            "name": "Commercial Trucks"
        },
        {
            "id": "1.1.2",
            "name": "Convertible"
        },
        {
            "id": "1.1.3",
            "name": "Coupe"
        },
        {
            "id": "1.1.4",
            "name": "Crossover"
        },
        {
            "id": "1.1.5",
            "name": "Hatchback"
        },
        {
            "id": "1.1.6",
            "name": "Microcar"
        },
        {
            "id": "1.1.7",
            "name": "Minivan"
        },
        {
            "id": "1.1.8",
            "name": "Off-Road Vehicles"
        },
        {
            "id": "1.1.9",
            "name": "Pickup Trucks"
        },
        {
            "id": "1.1.10",
            "name": "Sedan"
        },
        {
            "id": "1.1.11",
            "name": "Station Wagon"
        },
        {
            "id": "1.1.12",
            "name": "SUV"
        },
        {
            "id": "1.1.13",
            "name": "Van"
        }],
        "id": "1.1",
        "name": "Auto Body Styles"
    }
  }
}

这是所需的JSON:

{
"id": "1.1.1",
"name": "Commercial Trucks"
}
{
"id": "1.1.2",
"name": "Convertible"
}

我该如何使用jq来解析它?
10x :)

您的输出只有2个对象,您真的只需要前2个吗? - RomanPerekhrest
@user9763887 - 请明确功能需求。 - peak
我需要整个对象,这两个对象只是示例,用来展示输出的样子。即使我运行:cat /home/ubuntu/pcn/iab/source/dmp-data-source.json | jq '.categories[0].categories[0].categories[],.categories[0].categories[0].categories[]' > /home/ubuntu/pcn/iab/result/dmp-data-result1.json,它也没有捕获到"id"="1.1"。 - user9763887
2个回答

8
假设JSON输入已经被更正,下面的jq筛选器似乎能够满足要求,如下所示:
.categories[].categories[].categories[]

这将生成一个JSON对象流,开头为:
{
  "id": "1.1.1",
  "name": "Commercial Trucks"
}
{
  "id": "1.1.2",
  "name": "Convertible"
}

2
假设您通过这种方式关闭数组来修复格式不正确的JSON数据:
          ...
          "id": "1.1",
          "name": "Auto Body Styles"
        }
      ]
    }
  ]
}

您可以使用以下的 jq 脚本:
$ jq '.categories[0].categories[0].categories[0],.categories[0].categories[0].categories[1]' file
{
  "id": "1.1.1",
  "name": "Commercial Trucks"
}
{
  "id": "1.1.2",
  "name": "Convertible"
}

这个 jq 语句选择了这些嵌套数组中的第一和第二个元素。


但是所需的Json需要填写所有的id+name(不仅仅是示例中的)。 - user9763887
如果我理解得正确,你需要使用 jq '.categories[0].categories[0].categories[]' file。如果不是这样,请在问题中提供准确的要求。 - oliv
我需要整个对象,这两个对象只是示例,用来展示输出的样子。即使我运行:cat /home/ubuntu/pcn/iab/source/dmp-data-source.json | jq '.categories[0].categories[0].categories[],.categories[0].categories[0].categories[]' > /home/ubuntu/pcn/iab/result/dmp-data-result1.json,它也没有捕获到"id"="1.1"。 - user9763887

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接