Python에서 JSON을 구문 분석하는 방법

JSON 데이터 처리: 파이썬 가이드

JSON은 데이터를 교환하는 데 있어 매우 보편적인 형식입니다. 파이썬은 JSON 데이터를 분석하고 활용할 수 있도록 내장된 JSON 모듈을 제공합니다. 이 가이드에서는 파이썬에서 JSON을 다루는 모든 방법을 자세히 살펴보겠습니다.

이 튜토리얼을 마치면 다음과 같은 내용을 이해할 수 있습니다.

  • JSON의 기초
  • 파이썬에서 JSON 문자열을 분석하고 생성하는 방법
  • 파이썬에서 JSON 파일을 읽고 쓰는 방법

그럼 시작해 볼까요! 🚀

JSON이란 무엇인가?

JSON은 “JavaScript Object Notation”의 약자로, 텍스트 기반의 데이터 교환 형식입니다. 원래 JavaScript 객체에서 영감을 받았지만, 이제는 대부분의 프로그래밍 언어에서 JSON을 지원합니다.

API를 사용하거나 설정 파일을 읽어본 경험이 있다면 JSON을 이미 접했을 가능성이 큽니다.

API 호출 시 데이터를 JSON 형식으로 주고받으며, 소프트웨어 애플리케이션의 클라이언트-서버 통신에도 JSON이 널리 사용됩니다. 또한, JSON은 다양한 데이터를 저장하는 데에도 활용될 수 있습니다.

JSON의 구조는 파이썬의 딕셔너리(사전)와 매우 유사합니다. 딕셔너리는 키-값 쌍으로 데이터를 저장하는 파이썬의 강력한 내장 데이터 구조입니다.

더 자세히 알아보기 전에 몇 가지 중요한 점을 살펴보겠습니다.

  • 파이썬에서 JSON 객체는 딕셔너리 형태로 저장됩니다.
  • JSON 배열은 파이썬 리스트로 표현됩니다.
  • JSON의 boolean 값은 true와 false로 표시되며, 파이썬에서는 True와 False로 변환됩니다.

JSON에서 파이썬으로 변환되는 데이터 유형에 대한 자세한 내용은 공식 문서를 참조하세요.

json 모듈은 파이썬 표준 라이브러리에 포함되어 있으므로 별도로 설치할 필요가 없습니다. 다음과 같이 현재 디렉토리로 가져올 수 있습니다.

import json

파이썬에서 JSON 문자열 로드하기

파이썬에서 JSON 문자열을 로드하는 기본적인 형식은 다음과 같습니다.

<dict_obj> = json.loads(<json_str>)

여기서

  • <dict_obj>는 JSON 문자열을 로드할 파이썬 딕셔너리입니다.
  • <json_str>은 유효한 JSON 문자열입니다.

이 코드는 <json_str>을 파이썬 딕셔너리 <dict_obj>에 로드합니다.

예제를 통해 살펴봅시다. json_str이라는 JSON 문자열이 있다고 가정해 봅시다.

json_str = """
{
    "books": [
        {
            "title": "바람이 부는 갈대밭",
            "author": "케네스 그레이엄",
            "year": "1908"
        },
        {
            "title": "등대로",
            "author": "버지니아 울프",
            "year": "1927"
        }
    ]
}
"""

다음 코드 스니펫은 load() 메서드를 사용하여 JSON 문자열 json_str을 파이썬 딕셔너리에 로드하는 방법을 보여줍니다. type() 함수를 사용하여 py_dict가 파이썬 딕셔너리인지 확인할 수 있습니다.

py_dict = json.loads(json_str)

print(type(py_dict))

# 출력: <class 'dict'>

print(py_dict)

# 출력:
{'books': [{'title': '바람이 부는 갈대밭', 'author': '케네스 그레이엄', 'year': '1908'}, {'title': '등대로', 'author': '버지니아 울프', 'year': '1927'}]}

위 코드에서 볼 수 있듯이, JSON 문자열의 모든 필드는 py_dict의 키-값 쌍이 됩니다.

파이썬에서 JSON 문자열 생성하기

파이썬 딕셔너리가 있을 때, 어떻게 JSON 문자열을 만들 수 있을까요?

dumps() 메서드를 다음과 같은 구문으로 사용하여 JSON 문자열을 생성할 수 있습니다.

<json_str> = json.dumps(<dict_obj>)

여기서,

  • <dict_obj>는 JSON 문자열을 생성하려는 파이썬 딕셔너리입니다.
  • <json_str>은 결과 JSON 문자열입니다.

따라서 dumps() 메서드는 <dict_obj>를 JSON 문자열 <json_str>로 변환합니다.

기존 파이썬 딕셔너리인 py_dict에 “movies”라는 새로운 키를 추가해 보겠습니다. 다음 코드처럼 할 수 있습니다.

py_dict["movies"] = [{"title":"이미테이션 게임","year":"2014", "lang":"en","watched":True}]

이제 dumps() 메서드를 사용하여 수정된 딕셔너리를 새로운 JSON 문자열 json_str2로 변환해 보겠습니다.

json_str2 = json.dumps(py_dict)

print(json_str2)

# 출력:
{"books": [{"title": "바람이 부는 갈대밭", "author": "케네스 그레이엄", "year": "1908"}, {"title": "등대로", "author": "버지니아 울프", "year": "1927"}], "movies": [{"title": "이미테이션 게임", "year": "2014", "lang": "en", "watched": true}]}

위 예시에서 보듯이 출력된 JSON 문자열은 적절한 형식 없이는 읽기가 어렵습니다. 들여쓰기를 추가하려면 선택적 매개변수 indent를 사용할 수 있습니다.

들여쓰기를 2와 같은 정수로 설정하여 다음과 같이 수행할 수 있습니다.

json_str2 = json.dumps(py_dict, indent = 2)
print(json_str2)

# 출력:
{
  "books": [
    {
      "title": "바람이 부는 갈대밭",
      "author": "케네스 그레이엄",
      "year": "1908"
    },
    {
      "title": "등대로",
      "author": "버지니아 울프",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "title": "이미테이션 게임",
      "year": "2014",
      "lang": "en",
      "watched": true
    }
  ]
}

출력이 들여쓰기 되어 가독성이 향상된 것을 볼 수 있습니다.

참고: 💡 키를 알파벳 순서로 정렬하려면 sort_keys 매개변수를 True로 설정하면 됩니다.

다음 코드 조각에서 볼 수 있듯이 키가 알파벳 순서로 정렬되었습니다.

json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True)
print(json_str2)

# 출력:
{
  "books": [
    {
      "author": "케네스 그레이엄",
      "title": "바람이 부는 갈대밭",
      "year": "1908"
    },
    {
      "author": "버지니아 울프",
      "title": "등대로",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "lang": "en",
      "title": "이미테이션 게임",
      "watched": true,
      "year": "2014"
    }
  ]
}

이제 키가 “author”, “title”, “year”의 알파벳 순서로 나타납니다.

지금까지 파이썬에서 JSON 문자열을 사용하는 방법을 배웠습니다. 다음 섹션에서는 JSON 파일을 다루는 방법을 알아보겠습니다.

파이썬에서 JSON 파일 읽기

파이썬에서 JSON 파일을 읽으려면 다음 구문을 사용하십시오.

json.load(<json-file>)

# 여기서 <json-file>은 유효한 JSON 파일입니다.

load()가 아닌 load() 메서드를 사용하는 것에 주의하십시오. load()는 JSON 문자열을 로드하는 데 사용되며, load()는 JSON 파일을 로드하는 데 사용됩니다.

파이썬에서 파일을 사용할 때 컨텍스트 관리자를 사용하는 것이 좋습니다. 컨텍스트 관리자를 사용하지 않고 다음과 같이 파일을 읽으려고 시도할 수도 있습니다.

my_file = open('students.json','r')
contents = my_file.read()
print(contents)
file.close()

파일을 닫지 않으면 리소스 낭비가 발생할 수 있습니다.

그러나 컨텍스트 관리자를 사용하면 파일 작업이 완료된 후 파일이 자동으로 닫힙니다.

컨텍스트 관리자를 사용하여 다음과 같이 파일을 읽을 수 있습니다.

with open('students.json','r') as file:
   data = json.load(file)
   print(data)

# 출력:
{'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, {'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}

파일을 읽을 때 읽기 모드(위 코드에서 ‘r’로 표시)로 지정해야 합니다.

참고: 현재 디렉토리를 쉽게 탐색하려면 아래 이미지와 같이 JSON 파일이 main.py와 같은 폴더에 있는지 확인하십시오. JSON 파일이 다른 폴더에 있는 경우 파일 경로를 지정해야 합니다.

파이썬에서 JSON 파일 읽기

다음 섹션에서는 JSON 파일에 쓰는 방법을 배웁니다.✍

파이썬에서 JSON 파일에 쓰기

기존 JSON 파일에 쓰거나 새 JSON 파일을 만들려면 dump() 메서드를 다음과 같이 사용합니다.

json.dump(<dict_obj>,<json_file>)

# 여기서 <dict_obj>는 파이썬 딕셔너리입니다.
# 그리고 <json_file>은 JSON 파일입니다.

위 구문은 <dict_obj> 딕셔너리를 JSON 파일 <json_file>에 저장합니다.

이전 섹션에서 py_dict 딕셔너리를 만들었습니다. 이제 이 딕셔너리를 새 JSON 파일에 저장해 보겠습니다. 파일 이름은 new_file.json으로 지정합니다.

다음 코드 셀은 dump() 함수를 사용하는 방법을 보여줍니다.

with open('new_file.json','w') as file:
  json.dump(py_dict,file)

참고: 쓰기 모드(w)에서 파일을 열면 파일이 있는 경우 내용이 덮어쓰여집니다. 파일이 없는 경우 파일이 생성됩니다.

위의 코드를 실행하면 현재 작업 디렉토리에 새로운 JSON 파일이 생성된 것을 확인할 수 있습니다. JSON 파일의 내용을 살펴볼 수 있습니다.

파일에 쓸 때 주요 목표는 데이터 저장입니다. 서식을 유지하려면 indentsort_keys 매개변수를 사용할 수도 있습니다.

결론

⏱ 간단히 요약해 보겠습니다.

이 튜토리얼에서는 다음 내용을 배웠습니다.

  • JSON 사용의 기본
  • load()load() 메서드를 사용하여 각각 JSON 문자열과 JSON 파일을 읽는 방법
  • dumps()dump() 메서드를 사용하여 파이썬 딕셔너리를 각각 JSON 문자열과 JSON 파일로 변환하는 방법

이 튜토리얼이 도움이 되었기를 바랍니다. 즐거운 학습 되세요!

JSON 분석, 형식 지정 및 유효성 검사를 위한 도구도 살펴보세요.