[Python] IO - JSON 다루기


Development note/Python  2019. 12. 26. 09:00

안녕하세요. 명월입니다.


이 글은 Python에서 Json을 다루는 방법에 대한 글입니다.


제가 예전에 Python에서 파일을 다루는 방법에 대해 설명한 적이 있습니다.

링크 - [Python] IO (파일 입출력)

예전에 CSV와 XML 다루는 방법에 대해 설명한 적이 있습니다. Json을 다루는 것과는 관련성이 적으니 따로 링크는 생략하고 아래의 카테고리 관련 글로 확인해 주시기 바랍니다.


최근에 프로그램의 데이터를 주고 받는 형식으로 JSON 방식을 매우 많이 사용합니다. JSON이 뭐냐면 Javascript object notation의 약어로 한국 말로는 Javascript 데이터 표기법입니다.

즉, Javascript에서 데이터를 Json 형식으로 다루고 있는데, 이게 같은 스크립트 언어이여서 그런지 Python에서도 비슷한 표기법으로 사용되고 있습니다.

예를 들면 중괄호 {키:값} 형식은 딕셔너리고 대괄호 [데이터,데이터]는 리스트 형식입니다.


또 이 JSON의 XML의 계층적 표현도 가능하기 때문에 꽤 여러모로 활용도가 매우 높은 데이터 형식입니다.


그럼 먼저 JSON 데이터로 출력해 봅시다.

# json을 다루기 위해서는 json을 import해야 한다.
import json;

# 다음의 딕셔너리 데이터를 json로 만든다.
data = [{'name':'Tom','korean':90,'math':70,'english':80},
        {'name':'Smith','korean':70,'math':70,'english':50},
        {'name':'Wil','korean':80,'math':80,'english':60},
        {'name':'Who','korean':60,'math':40,'english':50}];

# data를 json string 타입으로 변환한다. 파라미터 indent는 pretty 설정이다.
jdata = json.dumps(data, indent=4);
# IO를 이용해서 출력한다.
with open("jdata.json", "w") as handle:
  print(jdata, file=handle);

딕셔너리 형태가 곧 json 타입이라 그런지 data의 형태가 그대로 메모장에 출력이 되었네요.


이번에는 반대로 파일로 json 타입을 읽어와서 딕셔너리 타입으로 만들어 봅시다.

# json을 다루기 위해서는 json을 import해야 한다.
import json;
# IO를 이용해서 파일을 string 타입으로 읽어 온다.
with open("jdata.json", "r") as handle:
  jdata =handle.read();
  
# string 타입으로 있던 데이터를 딕셔너리 타입으로 변경한다.
data = json.loads(jdata);
print(data);
print();
# 그냥 string과 헤갈릴 수 있으니 탐색으로 가져와 본다.
print(data[0]["name"]);

결과를 보면 확실히 딕셔너리 타입으로 데이터를 가져온 것같네요.

설명은 매우 간단하지만 json 타입은 여러 PHP의 composer던가 여러 파라미터 등에서 자주 사용하는 형식입니다. Python의 자료 형태 중 가장 많이 사용되는 함수이 않을까 생각됩니다.


여기까지 Python에서 Json을 다루는 방법에 관한 설명이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.