Как извлечь конкретный объект из JSON с массивами через JQ - PullRequest
0 голосов
/ 10 мая 2018

Как я могу извлечь только объекты id и name из этого JSON через jq?

Вывод должен выглядеть примерно так, как показано ниже.Это просто пример для требуемого вывода, реальное, что мне нужно, это перехватить все значения id и name, как в источнике JSON.

Это требуемый вывод:

{
 "name": "Auto Body Styles",
      "id": "1.1"}
{
          "name": "Convertible",
          "id": "1.1.2"
                 } 

Это исходный файл JSON:

{
  "name": "Automotive",
  "id": "1",
  "categories": [
    {
      "name": "Auto Body Styles",
      "id": "1.1",
      "categories": [
        {
          "name": "Commercial Trucks",
          "id": "1.1.1"
        },
        {
          "name": "Convertible",
          "id": "1.1.2"
        },
        {
          "name": "Coupe",
          "id": "1.1.3"
        },
        {
          "name": "Crossover",
          "id": "1.1.4"
        },
        {
          "name": "Hatchback",
          "id": "1.1.5"
        },
        {
          "name": "Microcar",
          "id": "1.1.6"
        },
        {
          "name": "Minivan",
          "id": "1.1.7"
        },
        {
          "name": "Off-Road Vehicles",
          "id": "1.1.8"
        },
        {
          "name": "Pickup Trucks",
          "id": "1.1.9"
        },
        {
          "name": "Sedan",
          "id": "1.1.10"
        },
        {
          "name": "Station Wagon",
          "id": "1.1.11"
        },
        {
          "name": "SUV",
          "id": "1.1.12"
        },
        {
          "name": "Van",
          "id": "1.1.13"
        }
      ]
    },
    {
      "name": "Auto Buying and Selling",
      "id": "1.2"
    },
    {
      "name": "Auto Insurance",
      "id": "1.3"
    },
    {
      "name": "Auto Parts",
      "id": "1.4"
    },
    {
      "name": "Auto Recalls",
      "id": "1.5"
    },
    {
      "name": "Auto Repair",
      "id": "1.6"
    },
    {
      "name": "Auto Safety",
      "id": "1.7"
    },
    {
      "name": "Auto Shows",
      "id": "1.8"
    },
    {
      "name": "Auto Technology",
      "id": "1.9",
      "categories": [
        {
          "name": "Auto Infotainment Technologies",
          "id": "1.9.1"
        },
        {
          "name": "Auto Navigation Systems",
          "id": "1.9.2"
        },
        {
          "name": "Auto Safety Technologies",
          "id": "1.9.3"
        }
      ]
    },
    {
      "name": "Auto Type",
      "id": "1.10",
      "categories": [
        {
          "name": "Budget Cars",
          "id": "1.10.1"
        },
        {
          "name": "Certified Pre-Owned Cars",
          "id": "1.10.2"
        },
        {
          "name": "Classic Cars",
          "id": "1.10.3"
        },
        {
          "name": "Concept Cars",
          "id": "1.10.4"
        },
        {
          "name": "Driverless Cars",
          "id": "1.10.5"
        },
        {
          "name": "Green Vehicles",
          "id": "1.10.6"
        }
      ]
    } ] }

1 Ответ

0 голосов
/ 12 мая 2018

я думаю, что вы хотите Рекурсивный спуск: ..

cat car.json | jq -r '.. | [.name?, .id?] | select(length>0) | @tsv'

для получения чего-то похожего в вашем примере,

cat car.json | jq -r '.. | {name:.name?, id:.id?}'
...