Вывод JQ-запроса в формате csv - PullRequest
0 голосов
/ 09 ноября 2019

Я пытался извлечь csv из нижеприведенного файла json, используя jq, но не смог пройти так далеко. Любые эксперты здесь могут помочь?

{
  "values": [
    {
      "resourceId": "xxxx-xxxx-xxx-8b16-xxxxxx",
      "property-contents": {
        "property-content": [
          { 
            "statKey": "config|name",
            "timestamps": [
              1517591034069
            ],
            "values": [
              "somebname.UNIVERSE.test.com"
            ]
          },
          { 
            "statKey": "summary|guest|ipAddress",
            "timestamps": [
              1517591034069
            ],
            "values": [
              "100.xx.5.xx"
            ]
          },
          { 
            "statKey": "summary|parentCluster",
            "timestamps": [
              1551120506024
            ],
            "values": [
              "UFO-UFO"
            ]
          },
          { 
            "statKey": "summary|parentDatacenter",
            "timestamps": [
              1551120806021
            ],
            "values": [
              "GALAXY-D123"
            ]
          },
                    { 
            "statKey": "summary|parentVcenter",
            "timestamps": [
              1517591334271
            ],
            "values": [
              "X-RAY123"
            ]
          },
          { 
            "statKey": "summary|runtime|powerState",
            "timestamps": [
              1517591034069
            ],
            "values": [
              "Powered On"
            ]
          }
        ]
      }
    },
    ..
    ...
xxx-xxxx-xxx-8b16-xxxxxx,somebname.UNIVERSE.test.com,100.xx.5.xx,UFO-UFO,GALAXY-D123,X-RAY123,Powered On

Ожидаемое значение o / p:

xxx-xxxx-xxx-8b16-xxxxxx,somebname.UNIVERSE.test.com,100.xx.5.xx,UFO-UFO,GALAXY-D123,X-RAY123,Powered On

1 Ответ

0 голосов
/ 09 ноября 2019

Ваш ожидаемый результат оставляет некоторые вещи неясными:

Второй столбец CSV содержит somebname.UNIVERSE.test.com, который, предположительно, был получен из раздела "property-content": [ { ..., "values": [ "somebname.UNIVERSE.test.com" ], ... }. Как определить, какой элемент в списке "property-content" выбрать для второго столбца? Это потому, что это первый элемент? Это из-за "statKey": "config|name"?

Что если список "property-content" пуст? Что если в ней нет нужной записи "statKey"? Что если список "values" имеет ноль или более одного элемента? Строка CSV может содержать только одно скалярное значение. Тот же вопрос применяется к последующим столбцам.

Делая здесь дикие предположения,

$ jq -r '.values[] | [ .resourceId, (."property-contents"."property-content"[] | .values[]) ] | join(",")' your.json
xxxx-xxxx-xxx-8b16-xxxxxx,somebname.UNIVERSE.test.com,100.xx.5.xx,UFO-UFO,GALAXY-D123,X-RAY123,Powered On

Я не могу гарантировать (и несколько сомневаюсь), что это работает в общем случае, но я былНевозможно извлечь общий случай из вашего одного примера.

...