Writer: Harim Kang
JSON
- JavaScript Object Notation이라는 뜻의 JSON은 다양한 형태의 데이터를 key, value구조로 구조화된 객체에 넣어서 처리하는 데이터 구조화 규격입니다.
JSON 특징
- UTF-8(유니코드) 문자열 인코딩만 허용합니다.
- 한글이나 다른 언어를 키 문자열로 사용가능합니다.
- 주석을 지원하지 않습니다. 주석을 지원하는 규격은 YAML 또는 XML이 있습니다.
JSON 구조
- 중괄호({}, 객체, dict)로 시작합니다.
- Key-Value 구조를 가지고 있습니다. 파이썬의 dictionary와 같다고 보면 될것 같습니다.
- key는 큰 따옴표로 감싼 문자열만 사용하여야합니다.
- value에는 정수, 실수, 문자열, Null, 객체 등등이 사용가능 합니다.
- 문자열 이스케이프를 사용할 수 있습니다.
- \t: 탭 추가
- \n: 개행
- ": 큰 따옴표 넣기
- 직렬화(serialization): JSON 데이터를 클래스, 맵, 리스트 등의 객체로 변환해주는 기능
- 역직렬화(deserialization): 직렬화의 반대 기능
json 파일 읽기 & 접근
import json
def open_json_file(filename):
with open(filename, encoding='UTF8') as file:
try:
# 파싱 성공시 데이터 리턴
return json.load(file)
except ValueError as e:
print('파싱 실패! 에러 코드: {}'.format(e))
# 파싱 성공시 None 리턴
return None
if __name__ == "__main__":
json_data = open_json_file('test1.json')
if json_data:
# 파싱 성공, 실패 여부 판별
print(json.dumps(json_data, indent="\t"))
print('내 학번: {}'.format(json_data['student number']))
print('이름: {}'.format(json_data['name']))
print('폰 번호: {}'.format(json_data['phone']['number']))
- 파이썬에서는 json 라이브러리를 import하여 사용합니다. 이때, 예외 처리를 신경써서 하면 좋습니다.
- indent = '\t' 파라미터를 주어서 json 라이브러리의 dump를 사용하면 아래의 출력과 같이 json 형태의 들여쓰기가 된 형태로 출력할 수 있습니다.
- 위의 예제와 같이 json 파일의 데이터를 json_data에 가져오고, ['key']를 사용하여 value에 접근할 수 있습니다.
JSON을 읽을 때 주의 할 점
- 버그, 잘못된 요청 등의 이유로 키가 존재하지 않거나 잘못된 값이 나오는 경우에는 예외가 발생합니다.
- 이때, try-catch문(파이썬은 try-except문)으로 예외 발생을 제어해야 합니다.
- 또는, if문으로 키를 검사하는 방법이 있습니다.
- JSON 데이터를 읽어올 때에, 오름차순과 같은 순서가 있다고 생각하면 안됩니다. 언어마다 다르기 때문입니다.
JSON 파일 쓰기
def write_json_file(filename, content):
with open(filename, 'w', encoding='UTF8') as file:
# ensure_ascii는 아스키 문자를 제외하고 모든 문자열을 \u로 표기
# indent는 들여쓰기 추가
json.dump(content, file, ensure_ascii=False, indent=2)
if __name__ == "__main__":
test2 = {
u'num': 12345,
u'str': '강하림',
u'phone': '010'
}
write_json_file('test2.json', test2)
- 위의 코드와 같은 예제로 json 파일을 생성할 수 있습니다.
JSON을 만들 때 주의 할 점
- 항상 Null 값을 주의하는 것이 좋습니다. Null은 어떤 형태의 데이터가 원래 담기는지 알 수 없기 때문에 사용하지 않는 것이 좋습니다.
- Null 대신 아래와 같이 사용하는 것이 좋습니다.
- "숫자": 0
- "문자열": ""
- "객체": {}
- "배열": []
JSON 키 이름 형식
- PHP, 파이썬: snake_case
- 자바, JS: camelCase
JSON의 장단점
JSON 장점
- 텍스트 기반 데이터 규격으로, 가독성이 좋습니다.
- 많이 사용되는 보편적인 규격입니다.
- 다양한 언어에서 라이브러리를 제공하여 사용성도 좋습니다.
JSON 단점
- 트래픽 오버헤드
- 바이너리 기반의 프로토콜과 비교하여 데이터 크기가 큽니다. 압축과 같은 방법도 있지만, CPU 자원이 필요합니다.
- 서버의 경우 많은 데이터가 오고 가므로 부하 테스트를 필요로 합니다.
- 어려운 유지보수
- JSON 파일이 업데이트되면 그 파일을 사용하는 모든 프로그램도 규격을 통일시켜야합니다.
- 통일이 안되면, 서로 다른 규격의 파일을 사용하여 문제가 발생할 수 있습니다.
- "version": 1 과 같은 데이터를 추가하여 사용하여 버전 확인을 해주어야 합니다.
- 주석 불가
- 앞서 말한 것처럼 주석을 사용할 수 없기에 필요하다면 YAML과 같은 규격을 선택해야 합니다.
Reference
- 이기곤님의 '학교에서 알려주지 않는 17가지 실무 개발 기술'을 참고하여 정리 및 작성 하였습니다.
- 실습 코드는 제 방식대로 변경하였습니다.