Привет, я пытаюсь извлечь токены last_name, first_name и phone из следующих данных JSON:

{"message":"{\"_\":\"user\",\"pFlags\":{\"contact\":true},\"flags\":2167,\"id\":95384129,\"access_hash\":\"780828213343231334\",\"first_name\":\"xaa\",\"last_name\":\"xz\",\"phone\":\"989123930793\",\"photo\":{\"_\":\"userProfilePhoto\",\"photo_id\":\"409671715068685579\",\"photo_small\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"455930331\",\"local_id\":281464,\"secret\":\"3283911659027961987\"},\"photo_big\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"455930331\",\"local_id\":281466,\"secret\":\"3533047346646019161\"}},\"status\":{\"_\":\"userStatusLastMonth\"}}","phone":"989123930793","@version":"1","typ":"tg_contacts","access_hash":"780828213343231334","id":95384129,"@timestamp":"2020-01-26T13:53:31.091Z","path":"/home/user/mirror2/users_5d3de570e549953b6163eb0f.log","type":"redis","flags":2167,"host":"ubuntu","imported_from":"tg"}

Это моя команда

jq -r '[.first_name, .last_name, .phone]|@csv'

Как бы то ни было, я могу извлечь только поле phone, и я не знаю, почему я не могу извлечь first_name и last_name.

0
AdminBee 13 Окт 2020 в 11:42

1 ответ

Лучший ответ

Если вы попробуете

jq -r '.' file.json

Вы увидите, что нет имени и фамилии, только телефон.

{
  "message": "{\"_\":\"user\",\"pFlags\":{\"contact\":true},\"flags\":2167,\"id\":95384129,\"access_hash\":\"780828213343231334\",\"first_name\":\"xaa\",\"last_name\":\"xz\",\"phone\":\"989123930793\",\"photo\":{\"_\":\"userProfilePhoto\",\"photo_id\":\"409671715068685579\",\"photo_small\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"455930331\",\"local_id\":281464,\"secret\":\"3283911659027961987\"},\"photo_big\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"455930331\",\"local_id\":281466,\"secret\":\"3533047346646019161\"}},\"status\":{\"_\":\"userStatusLastMonth\"}}",
  "phone": "989123930793",
  "@version": "1",
  "typ": "tg_contacts",
  "access_hash": "780828213343231334",
  "id": 95384129,
  "@timestamp": "2020-01-26T13:53:31.091Z",
  "path": "/home/user/mirror2/users_5d3de570e549953b6163eb0f.log",
  "type": "redis",
  "flags": 2167,
  "host": "ubuntu",
  "imported_from": "tg"
}

Поля, которые вы ищете, находятся в .message, который представляет собой строку, закодированный объект JSON.

jq имеет встроенный fromjson, который вы можно использовать и получить его как JSON:

jq -r '.message | fromjson | [.first_name, .last_name, .phone]|@csv' file.json
"xaa","xz","989123930793"
2
thanasisp 14 Окт 2020 в 03:03