Как сравнить json с файлом CSV - PullRequest
0 голосов
/ 27 марта 2020

У меня есть одна полезная нагрузка json, которая используется для одного запроса на обслуживание. После обработки этой полезной нагрузки (JSON) она будет сохранена в S3, и через Athena мы сможем загрузить эти данные в формате CSV. Сейчас в реальном сценарии есть более 100 полей. Я хочу проверить их значение с помощью некоторого автоматизированного сценария вместо руководства.

скажем, мой пример полезной нагрузки похож на следующий:

{
  "BOOK": {
    "serialno": "123",
    "author": "xyz",
    "yearofpublish": "2015",
    "price": "16"
  }, "Author": [
    {
      "isbn": "xxxxx", "title": "first", "publisher": "xyz", "year": "2020"
    }, {
      "isbn": "yyyy", "title": "second", "publisher": "zmy", "year": "2019"
    }
  ]
}

пример CSV будет выглядеть следующим образом: enter image description here

Может кто-нибудь Пожалуйста, помогите мне, как именно я могу это сделать на Python? Может быть, библиотека или словарь?

1 Ответ

0 голосов
/ 27 марта 2020

похоже, вы просто хотите сгладить структуру JSON. Это будет проще всего сделать из списка «Автор». Поскольку CSV переименовал столбцы, вам понадобится какой-то способ представить это отображение. На основании только примера это работает:

import json
fin=open(some_json_file, 'r')
j=json.load(fin)
result=[]
for author in j['Author']:
    val = {'book_serialno':       j['BOOK']['serialno'],
           'book_author':         j['BOOK']['author'],
           'book_yearofpublish':  j['BOOK']['yearofpublish'],
           'book_price':          j['BOOK']['price'],
           'author_isbn':         author['isbn'], 
           'author_title':        author['title'],
           'author_publisher':    author['publisher'],
           'author_year':         author['year']}
    result.append(val)

Используется словарь для отображения сопоставления точек данных с именами новых столбцов. Возможно, вам удастся избежать использования списка. Зависит от того, как вы хотите использовать его позже. Для записи в CSV:

import csv
fout=open(some_csv_file, 'w')
writer=csv.writer(fout)
writer.writerow(result[0].keys())
writer.writerows(r.values() for r in result)

Это записывает имена столбцов в первой строке, а затем данные. Если вам не нужны имена столбцов, просто пропустите строку writerow(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...