Использование jq для создания файла .csv - PullRequest
0 голосов
/ 02 февраля 2019

Эта тема уже поднималась, но ответы не решают мою проблему, которая подробно описана ниже.

У меня есть следующий JSON-файл из вызова API ....

{
  "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_entries [] |[.key, .value.client_language, .value.global_rating] '

Я получаю следующий вывод, который представляет собой именно те данные, которые мне нужны, аккуратно упакованные в массивы ....

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

Мне нужно загрузить эти данные в базу данных MS Access, поэтому их необходимо преобразовать в файл .csv, чтобы мой запрос теперь выглядел следующим образом ....

jq '.данные |to_entries [] |[.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.Tks!

1 Ответ

0 голосов
/ 02 февраля 2019

Использовать необработанный режим (-r)

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

- raw-output / -r:

С этим параметром, если результатом фильтра является строка, тогда онбудет записываться непосредственно в стандартный вывод, а не форматироваться как строка JSON с кавычками.Это может быть полезно для взаимодействия фильтров jq с системами, не основанными на JSON.

...