Python: JSON в CSV - PullRequest
       7

Python: JSON в CSV

0 голосов
/ 06 февраля 2020

Я получаю файл JSON от API Docparser, который я хотел бы преобразовать в документ CSV.

Структура приведена ниже:

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "document_id": {
      "type": "string"
    },
    "remote_id": {
      "type": "string"
    },
    "file_name": {
      "type": "string"
    },
    "page_count": {
      "type": "integer"
    },
    "uploaded_at": {
      "type": "string"
    },
    "processed_at": {
      "type": "string"
    },
    "table_data": [
      {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "account_ref": {
              "type": "string"
            },
            "client": {
              "type": "string"
            },
            "transaction_type": {
              "type": "string"
            },
            "key_4": {
              "type": "string"
            },
            "date_yyyymmdd": {
              "type": "string"
            },
            "amount_excl": {
              "type": "string"
            }
          },
          "required": [
            "account_ref",
            "client",
            "transaction_type",
            "key_4",
            "date_yyyymmdd",
            "amount_excl"
          ]
        }

      }
    ]
  }
}

Первый у меня проблема в том, как работать только с разделом table_data?

Моя вторая проблема - написание фактического кода, который позволяет мне поместить каждый раздел, то есть account_ref, client, et c., в свои столбцы. У меня было так много изменений в моем коде, вывод варьировался от добавления свойств в столбцы и выгрузки части table_data в одну ячейку до печати только заголовков в одну ячейку (в виде списка).

Вот мой текущий код (который работает некорректно):

import pydocparser
import json
import pandas as pd

parser = pydocparser.Parser()
parser.login('API')

data2 = str(parser.fetch("Name of Parser", 'documentID'))
data2 = str(data2).replace("'", '"') # I had to put this in because it kept saying that it needs double quotes.

y = json.loads(str(data2))

json_file = open(r"C:\File.json", "w")
json_file.write(str(y))
json_file.close()
df1 = df = pd.DataFrame({str(y)})
df1.to_csv(r"C:\jsonCSV.csv")

Спасибо за помощь!

1 Ответ

1 голос
/ 06 февраля 2020

Pandas имеет хорошую встроенную функцию, которая называется pandas .json_noramlize (). Если вы используете pandas версию ниже 1.0.0, используйте pandas .io. json .json_normalize (), это следует разделить столбцы красиво. подробнее об этом здесь:

> 1.0.0: https://pandas.pydata.org/pandas-docs/version/0.22/generated/pandas.io.json.json_normalize.html

= <1.0.0 <a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.json_normalize.html" rel="nofollow noreferrer">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.json_normalize.html

...