【问题标题】:Using jq to create .csv file使用 jq 创建 .csv 文件
【发布时间】:2019-02-02 17:36:48
【问题描述】:

这个话题之前已经提出过,但是回复并不能完全解决我的问题,下面会详细说明。

我有以下来自 API 调用的 JSON 文件....

{
  "status": "ok",
  "meta": {
    "count": 3
  },
  "data": {
    "1030907370": {
      "client_language": "en",
      "last_battle_time": 1548555418,
      "account_id": 1030907370,
      "created_at": 1525288212,
      "updated_at": 1548557165,
      "private": null,
      "global_rating": 3906,
      "clan_id": null,
      "nickname": "Knightly_Gunner",
      "logout_at": 1548557161
    },
    "1020786770": {
      "client_language": "ja",
      "last_battle_time": 1548948444,
      "account_id": 1020786770,
      "created_at": 1465998341,
      "updated_at": 1548948547,
      "private": null,
      "global_rating": 4396,
      "clan_id": null,
      "nickname": "black_black_boss",
      "logout_at": 1548948544
    },
    "1018984431": {
      "client_language": "en",
      "last_battle_time": 1548550089,
      "account_id": 1018984431,
      "created_at": 1456254986,
      "updated_at": 1548550089,
      "private": null,
      "global_rating": 1666,
      "clan_id": null,
      "nickname": "doctordon",
      "logout_at": 1548550016
    }
  }
}

使用下面的 jq 查询....

jq '.data | to_entry[] | [.key, .value.client_language, .value.global_rating]'

我得到以下输出,这正是我需要的数据,整齐地打包在数组中......

[
  "1030907370",
  "en",
  3906
]
[
  "1020786770",
  "ja",
  4396
]
[
  "1018984431",
  "en",
  1666
]

我需要将此数据上传到 MS Access 数据库,因此需要将其转换为 .csv 文件,因此我的查询现在看起来像这样......

jq '.data | to_entry[] | [.key, .value.client_language, .value.global_rating] | @csv'

结果输出是....

"\"1030907370\",\"en\",3906"
"\"1020786770\",\"ja\",4396"
"\"1018984431\",\"en\",1666"

但这不是真正的 .csv 文件,不适用于 MS Access 或 Excel。我需要的是看起来像这样的输出......

"1030907370","en",3906
"1020786770","ja",4396
"1018984431","en",1666

但这就是我的问题所在!在从 jq 查询中实现所需输出方面,我将不胜感激。 谢了!

【问题讨论】:

    标签: json csv jq


    【解决方案1】:

    使用原始模式(-r)

    jq -r '.data | to_entries[] | [.key, .value.client_language, .value.global_rating] | @csv'
    

    --原始输出/-r:

    使用此选项,如果过滤器的结果是一个字符串,那么它将是 直接写入标准输出而不是格式化为 带引号的 JSON 字符串。这对于让 jq 过滤器说话很有用 到非基于 JSON 的系统。

    【讨论】:

    • 哇! - 你知道我花了多少小时试图解决这个问题吗?非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多