csv в JSON с объектом массива в Python

#python #json #pandas

Вопрос:

Возникли проблемы с преобразованием CSV-файла в JSON с массивом вложенных списков.

Ввод Csv:

 Id,Name,Sub1,Sub2
1,A,Mathematics,English
2,B,Mathematics,Science
 

Вывод JSON:

 {
  "sources": [
    {
      "Id": 1,
      "Name": "A",
      "subjects": [
        {
          "Sub1": "Mathematics",
          "Sub2": "English"
        }
      ]
    },
    {
      "Id": 2,
      "Name": "B",
      "subjects": [
        {
          "Sub1": "Mathematics",
          "Sub2": "Science"
        }
      ]
    }
  ]
}
 

пробовал с панд, как показано ниже, но нужно его улучшить

 import pandas as pd
csv_file = pd.DataFrame(pd.read_csv("/home/ubuntu/Proj/sample_2.csv", sep = ",", header = 0, index_col = False))

csv_file.to_json("/home/ubuntu/Proj/csvToJson_2.json", indent=4, orient = "records", date_format = "epoch", double_precision = 10, force_ascii = True, date_unit = "ms", default_handler = None)
 

Ответ №1:

Вы можете использовать DataFrame.apply() функцию lambda для создания настраиваемого формата, а затем json.dump записать его в файл json, как показано ниже:

 csv_file = pd.read_csv("/home/ubuntu/Proj/sample_2.csv", sep = ",", header = 0, index_col = False)

json_out_list = csv_file.apply(lambda x: {"Id": x['Id'], "Name": x['Name'], "subjects": [{"Sub1": x['Sub1'], "Sub2": x['Sub2']}]}, axis=1).to_list()

json_result = {"sources": json_out_list}

import json
with open("/home/ubuntu/Proj/csvToJson_2.json", 'w') as f:
    json.dump(json_result, f, indent=2)
 

Результат:

 {
  "sources": [
    {
      "Id": 1,
      "Name": "A",
      "subjects": [
        {
          "Sub1": "Mathematics",
          "Sub2": "English"
        }
      ]
    },
    {
      "Id": 2,
      "Name": "B",
      "subjects": [
        {
          "Sub1": "Mathematics",
          "Sub2": "Science"
        }
      ]
    }
  ]
}