我需要使用jq将JSON文件解析为.csv文件的帮助

时间:2020-08-01 16:58:57

标签: json jq

好的,所以这是一个相当简单的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 ***

这就是我被困住的地方。如何将“键”值包含到“值”数组的每个元素中,以实现所需的输出。

如果我忽略“键”并在“值”数组上使用“ to_entries”,它几乎可以完成工作,但效果不尽人意。

.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 :(得分:0)

这是一种非常保守的方法:

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