Мне нужна помощь в разборе файла JSON в файл .csv с помощью jq - PullRequest
0 голосов
/ 01 августа 2020

Хорошо, это довольно простой JSON исходный файл, который необходимо проанализировать ...

{
  "status": "ok",
  "meta": {
    "count": 10
  },
  "data": {
    "1040918564": [
      {
        "statistics": {
          "wins": 166,
          "battles": 441
        },
        "mark_of_mastery": 1,
        "tank_id": 9505
      },
      {
        "statistics": {
          "wins": 154,
          "battles": 325
        },
        "mark_of_mastery": 1,
        "tank_id": 47105
      }
    ],
    "1040836357": [
      {
        "statistics": {
          "wins": 216,
          "battles": 490
        },
        "mark_of_mastery": 1,
        "tank_id": 47105
      },
      {
        "statistics": {
          "wins": 114,
          "battles": 254
        },
        "mark_of_mastery": 2,
        "tank_id": 7969
      }
    ]
  }
}

Я хотел бы получить следующий вывод, который затем можно передать по конвейеру @ csv и вывод в мой файл .csv ....

[
  1040918564,
  166,
  441,
  1,
  9505
]
[
  1040918564,
  154,
  325,
  1,
  47105
]
[
  1040836357,
  216,
  490,
  1,
  47105
]
[
  1040836357,
  114,
  254,
  2,
  7969
]

Мой первый шаг - .data | to_entries[], который анализирует следующим образом ....

{
  "key": "1040918564",
  "value": [
    {
      "statistics": {
        "wins": 166,
        "battles": 441
      },
      "mark_of_mastery": 1,
      "tank_id": 9505
    },
    {
      "statistics": {
        "wins": 154,
        "battles": 325
      },
      "mark_of_mastery": 1,
      "tank_id": 47105
    }
  ]
*** snip ***

Здесь я ' м застрял. Как мне включить значение «key» в каждый элемент массива «value» для достижения желаемого результата.

Если я проигнорирую «key» и использую to_entries в массиве «value», это почти выполняет свою работу, но не совсем ...

.data | to_entries[] | {id: .key, value} | .value | to_entries [] | .value | [.statistics.wins, .statistics.battles, .mark_of_mastery, .tank_id] дает ....

[
  166,
  441,
  1,
  9505
]
[
  154,
  325,
  1,
  47105
]
[
  216,
  490,
  1,
  47105
]
[
  114,
  254,
  2,
  7969
]

что настолько близко, насколько я смог получить.

Я старею для этого и буду очень признателен за помощь. :)

1 Ответ

0 голосов
/ 01 августа 2020

Вот очень консервативный подход:

.data
| to_entries[]
| [.key]
  + (.value[]
     | (.statistics | [.wins, .battles])
       + [.mark_of_mastery, .tank_id])
...