Как использовать JQ для превращения смешанного JSON в CSV - PullRequest
0 голосов
/ 09 января 2020

не могу понять это ... Я хочу свернуть это JSON, чтобы только поле NAME и значения DATACLASSES каждой записи выводились в файл CSV. Это облагает налогом мой jq-fu, поскольку он должен смешать строку с вложенным массивом и каким-то образом поместить ее в CSV.

[
  {
    "Name": "Evite",
    "Title": "Evite",
    "Domain": "evite.com",
    "BreachDate": "2013-08-11",
    "AddedDate": "2019-07-14T14:51:51Z",
    "ModifiedDate": "2019-07-14T14:51:51Z",
    "PwnCount": 100985047,
    "Description": "In April 2019, the social planning website for managing online invitations <a href=\"https://www.evite.com/security/update?usource=lc&lctid=1800182\" target=\"_blank\" rel=\"noopener\">Evite identified a data breach of their systems</a>. Upon investigation, they found unauthorised access to a database archive dating back to 2013. The exposed data included a total of 101 million unique email addresses, most belonging to recipients of invitations. Members of the service also had names, phone numbers, physical addresses, dates of birth, genders and passwords stored in plain text exposed. The data was provided to HIBP by a source who requested it be attributed to &quot;JimScott.Sec@protonmail.com&quot;.",
    "LogoPath": "https://haveibeenpwned.com/Content/Images/PwnedLogos/Evite.png",
    "DataClasses": [
      "Dates of birth",
      "Email addresses",
      "Genders",
      "Names",
      "Passwords",
      "Phone numbers",
      "Physical addresses"
    ],
    "IsVerified": true,
    "IsFabricated": false,
    "IsSensitive": false,
    "IsRetired": false,
    "IsSpamList": false
  },
  {
    "Name": "VerificationsIO",
    "Title": "Verifications.io",
    "Domain": "verifications.io",
    "BreachDate": "2019-02-25",
    "AddedDate": "2019-03-09T19:29:54Z",
    "ModifiedDate": "2019-03-09T20:49:51Z",
    "PwnCount": 763117241,
    "Description": "In February 2019, the email address validation service <a href=\"https://securitydiscovery.com/800-million-emails-leaked-online-by-email-verification-service\" target=\"_blank\" rel=\"noopener\">verifications.io suffered a data breach</a>. Discovered by <a href=\"https://twitter.com/mayhemdayone\" target=\"_blank\" rel=\"noopener\">Bob Diachenko</a> and <a href=\"https://twitter.com/vinnytroia\" target=\"_blank\" rel=\"noopener\">Vinny Troia</a>, the breach was due to the data being stored in a MongoDB instance left publicly facing without a password and resulted in 763 million unique email addresses being exposed. Many records within the data also included additional personal attributes such as names, phone numbers, IP addresses, dates of birth and genders. No passwords were included in the data. The Verifications.io website went offline during the disclosure process, although <a href=\"https://web.archive.org/web/20190227230352/https://verifications.io/\" target=\"_blank\" rel=\"noopener\">an archived copy remains viewable</a>.",
    "LogoPath": "https://haveibeenpwned.com/Content/Images/PwnedLogos/VerificationsIO.png",
    "DataClasses": [
      "Dates of birth",
      "Email addresses",
      "Employers",
      "Genders",
      "Geographic locations",
      "IP addresses",
      "Job titles",
      "Names",
      "Phone numbers",
      "Physical addresses"
    ],
    "IsVerified": true,
    "IsFabricated": false,
    "IsSensitive": false,
    "IsRetired": false,
    "IsSpamList": false
  }
]

Я могу сгладить DataClasses только с этим конвейером jq:

jq -r  '.[] | {DataClasses} | .[] | @csv'

Но в ней отсутствует строка имени, и я не смог понять, как ее включить.

Контекст состоит в том, чтобы сгенерировать отчет с сайта haveibeenpwned.com (откуда возвращается JSON), который будет содержать имя нарушения и подробные данные из классов данных о природе нарушения, так что это может быть приятно обобщены и отправлены уведомления по электронной почте пострадавшим сторонам. Достаточно легко написать это - у нас есть ключ API, и т. Д. c, но мы не можем понять, как заставить JSON сотрудничать;)

Если этот базовый c подход имея все это в CSV (где его можно легко исказить в perl или python), любые предложения о том, как лучше всего справиться с этим элегантно с помощью jq mangling, что позволит нам легко ссылаться на ИМЯ нарушения и элементы в связанный с ним массив DATACLASSES был бы наиболее полезен

Любой совет с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 09 января 2020

С образцом JSON, вызов

jq -r '.[] | [.Name, .DataClasses[]] | @csv'

производит:

"Evite","Dates of birth","Email addresses","Genders","Names","Passwords","Phone numbers","Physical addresses"
"VerificationsIO","Dates of birth","Email addresses","Employers","Genders","Geographic locations","IP addresses","Job titles","Names","Phone numbers","Physical addresses"
...