본문 바로가기

IT

[Python] json 파일을 csv 파일로 변환하기

json 파일은 아래와 같이 저장되어 있다.

[
{"title": "Oh Boy", "songId": "30179107", "artist": "AOA", "img": "aaa.jpg"},
{"title": "With ELVIS", "songId": "30179108", "artist": "AOA", "img": "bbb.jpg"},
{"title": "Good Luck", "songId": "8181755", "artist": "AOA", "img": "ccc.jpg"},
...
]

 

json 구성 요소

더보기

1. 배열: 대괄호[]로 표현됨

2. 객체: 중괄호{}로 표현하며, 다수의 요소(속성)을 갖음

3. 요소: 속성으로 부르기도 하며, key:value 형태로 표현됨

"AOA":[
    {"title":"날 보러 와요","album":"New Moon","year":"2019"},
    {"title":"빙글 뱅글","album":"Bingle Bangle","year":"2018"}
],
"체리블렛":[
    {"title":"무릎을 탁 치고", "album":"무릎을 탁 치고", "year":"2020"},
    {"title":"네가 참 좋아", "album":"Love Adventure", "year":"2019"}
]

 

 

코드의 절차는 아래와 같다.

  1. json 파일 읽어서 data에 저장
  2. csv 파일에 컬럼 헤더 저장
  3. json의 단일 객체 csv에 저장 (title 요소에 'inst.' 또는 'Inst.'가 포함되어 있을 경우 저장하지 않음)
import json
import csv

# music.json 파일을 읽어서 melon.csv 파일에 저장
with open('music.json', 'r', encoding = 'utf-8') as input_file, open('melon.csv', 'w', newline = '') as output_file :
    data = json.load(input_file)
    
    '''
    data[0] 은 json 파일의 한 줄을 보관 {"title:"Super Duper", "songId": ...}
    data[0]['컬럼명'] 은 첫 번째 줄의 해당 컬럼 element 보관
    '''

    f = csv.writer(output_file)
    
    # csv 파일에 header 추가
    f.writerow(["title", "songId", "artist", "img"])
    
    # 노래 제목에 아래 문구가 포함 되어있을 경우 csv 저장하지 않음
    matches = ['inst.', 'Inst.']
    
    # write each row of a json file
    for datum in data:
        
        # exclude instrument versions
        if any(x in datum["title"] for x in matches):
            
            continue
            
        f.writerow([datum["title"], datum["songId"], datum["artist"], datum["img"]])

 

참고한 코드들 ☞ 참조