JSON은 JavaScript Object Notation을 줄인 것으로, 보통 제이슨으로 읽는다. 일반적으로 클라이언트가 서버에서 가져오는 데이터는 이 형식이고, 현재 표준 형식으로 많이 쓰이고 있다. 원류는 자바스크립트지만 현재는 언어 독립적인 개별 포맷. 그러니까 누가 제이슨 파일 주세요 하면 JSON파일 달라는거지 제이슨씨 파일 주세요가 아니다 남의 파일을 왜 달라고 해
키-값 쌍으로 이루어진 데이터를 텍스트 형태로 기록해둔 것이라 휴먼 가독성은 좋다.
오늘의 도우미
{
"Water": {
"molecular weight": "18.016",
"molecular formula": "H2O"
},
"Ethanol": {
"molecular weight": "46.07",
"molecular formula": "C2H5OH"
},
"Glucose": {
"molecular weight": "180.156",
"molecular formula": "C6H12O6"
},
"Sucrose": {
"molecular weight": "342.3",
"molecular formula": "C12H22O11"
}
}
이래뵈도 수제다… 아 그리고 얘도 하려면 모듈 필요하다. 뭐 깔 필요는 없고
import json
이것만 한 줄 맨 위에 붙여주자.
JSON파일 읽기
with open('/home/koreanraichu/test.json') as f:
json_data = json.load(f)
print(json.dumps(json_data))
그냥 이렇게 쓰면 알아서 불러는 온다.
{"Water": {"molecular weight": "18.016", "molecular formula": "H2O"}, "Ethanol": {"molecular weight": "46.07", "molecular formula": "C2H5OH"}, "Glucose": {"molecular weight": "180.156", "molecular formula": "C6H12O6"}, "Sucrose": {"molecular weight": "342.3", "molecular formula": "C12H22O11"}}
근데 형식에서 큰 기대는 하지 마시고…
JSON파일에서 특정 부분만 볼 수 있나요?
일단 결론부터 말하자면 된다.
{"Water": {"molecular weight": "18.016", "molecular formula": "H2O"}
이거 어디서 많이 봤다… Python은 JSON을 딕셔너리 형식으로 가져오는데, 딕셔너리 형식은 키-밸류로 이루어져 있고 키값으로 픽할 수가 있다. 그럼 얘도? 네. 그겁니다.
print(json_data['Water'])
print(json_data['Water']['molecular formula'])
그냥 이렇게 픽하면 된다. (편-안) 뿐만 아니라 일반적인 딕셔너리처럼 정렬도 된다.
JSON파일 수정하기
{"Water": {"molecular weight": "18.016", "molecular formula": "H2O"}, "Ethanol": {"molecular weight": "46.07", "molecular formula": "C2H5OH"}, "Glucose": {"molecular weight": "180.156", "molecular formula": "C6H12O6"}, "Sucrose": {"molecular weight": "342.3", "molecular formula": "C12H22O11"}, "Methanol": {"molecular weight": "", "molecular formula": ""}}
여기에 새로 메탄올에 대한 정보를 추가했는데, 문제가 하나 있다. 메탄올의 분자량과 분자식이 빠졌다. 어? 이거 그럼 어떻게 수정해요? 파일단에서 건드려야 하나요? ㄴㄴ 파이썬으로 고칩시다.
json_data['Methanol']['molecular weight'] = '32.04'
json_data['Methanol']['molecular formula'] = 'CH3OH'
위에서 딕셔너리 변환이 된다고 했는데, 딕셔너리는 키 픽하고 그 키에 맞는 밸류를 수정하는 것도 된다. 그래서 분자량과 분자식에 해당하는 키를 픽한다음 밸류를 수정해주고
with open ('/home/koreanraichu/test.json','w', encoding='utf-8') as s:
json.dump(json_data,s)
이렇게만 하면 들여쓰기가 가출한다.
with open ('/home/koreanraichu/test.json','w', encoding='utf-8') as s:
json.dump(json_data,s,indent = '\t')
indent = \t를 주자.
JSON파일 쓰기
기존 JSON파일을 읽고 수정해봤으니 이제 새로 써보자. 아니 에디터 끄고.
cellphone = dict()
cellphone['Samsung'] = "Galaxy Z flip"
cellphone['Apple'] = "iPhone"
tabletpc = dict()
tabletpc['Samsung'] = 'Galaxy tab'
tabletpc['Apple'] = 'iPad'
핸드폰과 태블릿PC에 대한 딕셔너리를 생성한다. (cellphone=핸드폰 영어로 이거 맞음)
mobile_device = dict()
mobile_device['Cellphone'] = cellphone
mobile_device['Tablet PC'] = tabletpc
그리고 두 딕셔너리를 하나로 묶을 수 있는 큰 딕셔너리(모바일 기기)를 하나 만든다.
with open ('/home/koreanraichu/test2.json','w', encoding='utf-8') as s:
json.dump(mobile_device,s,indent = '\t')
그리고 큰 딕셔너리를 그대로 쓰면 된다.
Reply