본문 바로가기

My Work/Work Automation(업무 자동화)

JSON을 CSV로 바꾸는 코드

모든 JSON 파일에 적용되지 않으니 해당 JSON 구조를 파악하고 코드를 변형해서 사용하자.

 

현재 내가 CSV 파일로 바꿀려고 하는 JSON 파일의 구조이다. 

{
  "description": "I love DATA.", 
  "external_url": "https://openseacreatures.io/3", 
  "image": "https://storage.googleapis.com/temp/temp/temp.png", 
  "name": "temp111",
  "edition" : 1,
  "attributes": [
  {"trait_type":"Body","value":"Skinny"},
  {"trait_type":"Face","value":"Smile"},], 
 }

 

여기서 edtion과 edtion에 따른 attribute만 CSV 파일에 저장하고자 한다. 예상되는 CSV 파일 형태는 아래와 같다. 

edtion Body Face
1 Skinny Smile
import json
import csv

# JSON 파일 열기 및 읽기
def openRead_JSON_File(str_filepath):
    with open(str_filepath, 'r') as file_JSON:
        return json.load(file_JSON)

# JSON 파일에서 edition과 attributes 데이터 추출
def extract_EditionAttributes(dict_JSONData):
    list_editionAttributes = []
    for obj_item in dict_JSONData:
        dict_singleEditionAttributes = {}
        dict_singleEditionAttributes['edition'] = obj_item.get('edition', 'N/A')
        
        list_attributes = obj_item.get('attributes', [])
        for dict_attribute in list_attributes:
            str_traitType = dict_attribute.get('trait_type', 'N/A')
            str_value = dict_attribute.get('value', 'N/A')
            dict_singleEditionAttributes[str_traitType] = str_value
            
        list_editionAttributes.append(dict_singleEditionAttributes)
    return list_editionAttributes

# CSV 파일 작성
def write_CSV_File(str_filepath, list_editionAttributes):
    list_CSVHeader = ['edition']
    for dict_item in list_editionAttributes:
        for str_traitType in dict_item.keys():
            if str_traitType not in list_CSVHeader:
                list_CSVHeader.append(str_traitType)

    with open(str_filepath, 'w', newline='', encoding='utf-8') as file_CSV:
        writer_CSV = csv.DictWriter(file_CSV, fieldnames=list_CSVHeader)
        writer_CSV.writeheader()
        for dict_item in list_editionAttributes:
            writer_CSV.writerow(dict_item)
    print("작성 완료")

# 메인 함수
def main():
    str_JSONFilepath = '(파일 경로)'
    str_CSVFilepath = '(파일 경로)'
    
    dict_JSONData = openRead_JSON_File(str_JSONFilepath)
    list_editionAttributes = extract_EditionAttributes(dict_JSONData)
    write_CSV_File(str_CSVFilepath, list_editionAttributes)

if __name__ == "__main__":
    main()