Преобразование таблицы в JSON

#python #json #bash

#python #json #bash

Вопрос:

Я пытаюсь преобразовать таблицу (в формате csv) в формат JSON.

Ввод (input.csv)

 id,v1,v2,v3
ab,1,2,3
cd,4,5,6
ef,7,8,9
  

Ожидаемый результат

 [
{"id": "ab", "vars": [{"var": "v1", "value": 1}, {"var": "v2", "value": 2}, {"var": "v3", "value": 3}]},
{"id": "cd", "vars": [{"var": "v1", "value": 4}, {"var": "v2", "value": 5}, {"var": "v3", "value": 6}]},
{"id": "ef", "vars": [{"var": "v1", "value": 7}, {"var": "v2", "value": 8}, {"var": "v3", "value": 9}]}
]
  

До сих пор я написал цикл для этого, и это работает

 import csv 
import json 

def make_json(csv_path, json_path): 
      
    V1 = {}
    V2 = {}
    V3 = {}
    V = {}
    Vlist = []
      
    with open(csv_path) as csvf: 
        csvReader = csv.DictReader(csvf) 
        
        for rows in csvReader: 
            
            V["id"] = rows["id"]
            
            V1["var"] = "v1"
            V1["value"] = rows['v1']
            V2["var"] = "v2"
            V2["value"] = rows['v2']
            V3["var"] = "v3"
            V3["value"] = rows['v3']
            
            V["vars"] = [V1, V2, V3]
            Vlist.append(V)
            
    json_string = json.dumps(Vlist)
    
    with open(json_path, 'w') as jsonf: 
        jsonf.write(json.dumps(json_string)) 
  
 make_json("input.csv", "my.json")
  

my.json

 [{"id": "ef", "vars": [{"var": "v1", "value": "7"}, {"var": "v2", "value": "8"}, {"var": "v3", "value": "9"}]}, {"id": "ef", "vars": [{"var": "v1", "value": "7"}, {"var": "v2", "value": "8"}, {"var": "v3", "value": "9"}]}, {"id": "ef", "vars": [{"var": "v1", "value": "7"}, {"var": "v2", "value": "8"}, {"var": "v3", "value": "9"}]}]
  

Тем не менее, мой настоящий csv-файл большой, с дюжиной столбцов (неструктурированное имя столбца. не v1, v2, v3). Поэтому я ищу более умное решение. Любой совет действительно ценится.

Комментарии:

1. import json было бы лучшим местом для начала. pandas было бы проще всего конвертировать между типами файлов (см. Мой ответ ниже)

2. Действительно ли в вашем входном файле есть все, что связано с полями в формате ascii, или это просто csv? Если последнее, используйте фактический формат.

Ответ №1:

Используйте pandas:

 import pandas as pd
pd.read_csv('filename.csv').to_json('filename.json')
  

Ответ №2:

Быстрый поиск в Google показал эту ссылку: https://datatofish.com/csv-to-json-string-python /

Соответствующая часть, вероятно, такова:

 import pandas as pd
read_file = pd.read_csv (import_file_path)
...
read_file.to_json (export_file_path)
  

Существует также множество онлайн-инструментов, если вам нужно сделать это только один раз.
(например: https://csvjson.com/csv2json