Python 3 JSON 파일 처리 방법

JSON 개요

JSON(JavaScript Object Notation)은 데이터 교환을 위한 가벼운 텍스트 형식으로, 객체, 배열, 문자열, 숫자, 논리값(Boolean), null 값을 지원합니다. JSON 구조는 다음과 같은 특징을 갖습니다:

  • 단일 인용 부호만 허용
  • 요소 간 구분자로 쉼표 사용 (마지막 요소에는 쉼표 없음)
  • 주석 기능 미지원
  • 특수 문자는 ASCII 코드로 변환 필요 (\uXXX 형식)
  • 중첩된 객체/배열 구조 가능

예시 파일 형식: sample.json

{
    "이름": "Cactus",
    "나이": 18,
    "기술": ["파이썬", "자바", "고", "노드JS"],
    "블로그": true,
    "결혼": null
}

JSON과 Python 데이터 유형 매핑

JSON 형식 Python 유형
객체 딕셔너리
배열 리스트
문자열 문자열
숫자 정수/실수
논리값 True/False
null None

주의: Python 내 JSON은 JSON 문법에 맞는 문자열로, 단일 또는 다중 줄로 구성된 문자열 형태입니다.

JSON 문자열과 딕셔너리 변환

변환 필요성: JSON은 저장 전송에 적합하지만 값 추출이 어려우며, 딕셔너리는 메모리 접근이 용이하지만 전송 시 불편함이 있음

Python 내장 json 모듈을 사용하여 변환 가능

  • json.dumps(딕셔너리): 딕셔너리를 JSON 문자열로 변환
  • json.loads(JSON 문자열): JSON 문자열을 딕셔너리로 변환 (잘못된 형식 시 JSONDecodeError 발생)

예시1: 딕셔너리 → JSON 문자열

import json

data = {
    '이름': 'Cactus', 
    '나이': 18, 
    '기술': ['파이썬', '자바', '고', '노드JS'], 
    '블로그': True, 
    '결혼': None
}

print(json.dumps(data))
print(json.dumps(data, indent=4, sort_keys=True, ensure_ascii=False))

json.dumps() 파라미터 설명:

  • indent: 출력 형식 지정 (0이면 단일 줄)
  • sort_keys: 키 순서 정렬 여부
  • ensure_ascii: 비ASCII 문자 처리 방식

출력 결과:

{"이름": "Cactus", "나이": 18, "기술": ["파이썬", "자바", "고", "노드JS"], "블로그": true, "결혼": null}
{
    "나이": 18,
    "결혼": null,
    "블로그": true,
    "이름": "Cactus",
    "기술": [
        "파이썬",
        "자바",
        "고",
        "노드JS"
    ]
}

예시2: JSON 문자열 → 딕셔너리

import json

json_str = '''{
    "이름": "Cactus",
    "나이": 18,
    "기술": ["파이썬", "자바", "고", "노드JS"],
    "블로그": true,
    "결혼": null
}'''

print(json.loads(json_str))

출력 결과:

{'이름': 'Cactus', '나이': 18, '기술': ['파이썬', '자바', '고', '노드JS'], '블로그': True, '결혼': None}

JSON 파일과 딕셔너리 변환

직접 딕셔너리와 파일 간 변환도 가능

  • json.dump(딕셔너리, 파일객체): 딕셔너리를 JSON 파일로 저장
  • json.load(파일객체): JSON 파일을 딕셔너리로 로드

예시3: 딕셔너리 → JSON 파일

import json

data = {
    '이름': 'Cactus', 
    '나이': 18, 
    '기술': ['파이썬', '자바', '고', '노드JS'], 
    '블로그': True, 
    '결혼': None
}

with open("sample.json", "w", encoding='utf-8') as f:
    json.dump(data, f, indent=4, sort_keys=True, ensure_ascii=False)

생성된 sample.json 파일 내용:

{
    "나이": 18,
    "결혼": null,
    "블로그": true,
    "이름": "Cactus",
    "기술": [
        "파이썬",
        "자바",
        "고",
        "노드JS"
    ]
}

예시4: JSON 파일 → 딕셔너리

import json

with open("sample.json", encoding="utf-8") as f:
    loaded_data = json.load(f)

print(loaded_data)

출력 결과:

{'나이': 18, '결혼': None, '블로그': True, '이름': 'Cactus', '기술': ['파이썬', '자바', '고', '노드JS']}

참고: 날짜 객체 등 Python 고유 객체는 변환 불가능하며, 복잡한 구조는 JSONPath를 활용해 분석 가능

태그: Python JSON 데이터 직렬화 파일 입출력 딕셔너리 조작

5월 23일 22:33에 게시됨