Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 JSON 완벽 가이드: json 모듈로 데이터 읽고 쓰는 방법

JSON은 구조화된 데이터를 저장하는 데 널리 사용되는 데이터 형식입니다.

파이썬으로 애플리케이션을 개발하다 보면 JSON을 활용해야 하는 경우가 자주 생깁니다. 예를 들어 JSON 파일에서 데이터를 읽어오거나, 애플리케이션의 데이터를 JSON 형식으로 파일에 저장해야 할 수 있습니다.

이 글에서는 JSON 데이터 형식의 기본 개념부터 파이썬 json 모듈의 사용법, 그리고 실제로 JSON을 다루는 다양한 방법까지 차근차근 살펴봅니다. 이 튜토리얼을 끝까지 읽고 나면 파이썬 프로그램에서 JSON을 능숙하게 활용할 수 있게 될 것입니다.

JSON이란 무엇인가?

JSON은 JavaScript Object Notation(자바스크립트 객체 표기법)의 약자로, 구조화된 데이터를 저장할 수 있는 데이터 형식입니다.

JSON은 주로 웹 애플리케이션에서 서버와 클라이언트 간에 데이터를 주고받을 때 사용됩니다. Fitbit API나 Google Maps API처럼 많은 API가 JSON 형식으로 데이터를 반환하는 것을 본 적이 있을 겁니다.

그 이유는 JSON 데이터가 표준화되어 있고, 구조적이며, 읽기 쉽기 때문입니다.

다음은 파이썬에서 볼 수 있는 JSON 레코드의 예시입니다:

{
	"name": "James Smith",
	"id": 202,
	"probation": false
}

이 레코드는 세 개의 키(콜론(:)의 왼쪽)와 세 개의 값(콜론의 오른쪽)을 저장하고 있습니다. 각 키는 하나의 값과 연결되어 있습니다.

JSON 데이터 형식을 딕셔너리와 혼동해서는 안 됩니다. 겉보기에는 딕셔너리와 비슷해 보이지만, JSON은 '데이터 형식'이고 딕셔너리는 '자료구조'라는 점에서 서로 다릅니다.

즉, JSON 데이터를 딕셔너리처럼 다루고 싶다면 딕셔너리로 변환해야 하고, 반대로 딕셔너리를 JSON으로 저장하고 싶다면 JSON으로 변환해야 합니다.

json 모듈 임포트하기

파이썬에서 JSON 객체를 다루기 전에 먼저 json 모듈을 임포트해야 합니다. 이 모듈에는 JSON 데이터를 처리할 수 있는 다양한 함수들이 포함되어 있습니다.

json 모듈을 임포트하려면 다음 문장을 사용합니다:

import json

이제 json 모듈을 코드에 불러왔으니, 모듈이 제공하는 함수들을 사용할 준비가 되었습니다.

JSON을 딕셔너리로 변환하기 (파싱)

JSON 데이터를 다룰 때 가장 중요한 작업 중 하나는 JSON을 딕셔너리로 파싱(parsing)하는 것입니다.

JSON을 딕셔너리로 변환하려면 json.loads() 메서드를 사용합니다.

json.loads()는 하나의 매개변수를 받습니다. 바로 딕셔너리로 변환하고 싶은 JSON 문자열입니다.

예를 들어, 엔지니어링 팀에서 한 개발자에게 배정된 프로젝트 정보를 담은 JSON 문자열이 있다고 가정해 봅시다. 이 JSON 문자열을 딕셔너리로 변환하려면 다음과 같은 코드를 사용할 수 있습니다:

import json

employee = '{"name": "Linda Richardson", "projects": ["Directory", "Homepage"]}'
employee_dictionary = json.loads(employee)

print(employee_dictionary)
print(employee_dictionary["name"])

코드를 실행하면 다음과 같은 결과가 출력됩니다:

{'name': 'Linda Richardson', 'projects': ['Directory', 'Homepage']}
Linda Richardson

코드를 하나씩 살펴보겠습니다. 먼저 json 모듈을 임포트합니다. 그다음 직원 정보를 JSON 구조로 담고 있는 employee라는 문자열을 선언합니다.

이어서 json.loads()를 사용해 employee 문자열을 딕셔너리로 변환합니다. 그리고 새로 만든 딕셔너리를 콘솔에 출력하고, name 키의 값도 함께 출력합니다.

결과만 보면 딕셔너리가 원래 JSON 문자열과 똑같아 보일 수 있습니다. 하지만 이제 데이터는 딕셔너리로 저장되어 있습니다. "name" 키의 값을 출력했을 때 "Linda Richardson"이 콘솔에 출력되는 것으로 이를 확인할 수 있습니다.

딕셔너리를 JSON 문자열로 변환하기

딕셔너리를 다루다 보면 이를 JSON 문자열로 변환해야 하는 경우가 있습니다.

이는 매우 흔한 작업인데, JSON 값을 파일에 저장하려면 문자열 형태로 포맷해야 하기 때문입니다. 딕셔너리를 JSON으로 변환하려면 json.dumps() 메서드를 사용합니다.

예를 들어 직원 정보를 담은 딕셔너리를 JSON 문자열로 변환한다고 가정해 봅시다. 다음 코드를 사용하면 됩니다:

import json

employee = {
	"name": "Linda Richardson",
	"id": 107,
	"probation": False,
	"department": "Sales"
}

employee_json = json.dumps(employee)
print(employee_json)

코드를 실행하면 다음과 같은 결과가 출력됩니다:

{"name": "Linda Richardson", "id": 107, "probation": false, "department": "Sales"}

출력 결과가 원래 딕셔너리와 비슷해 보일 수 있지만, 이제 딕셔너리는 문자열로 저장되어 있습니다.

JSON 문자열 포맷팅하기

json.dumps() 메서드는 생성되는 최종 문자열을 더 읽기 쉽게 만들어 주는 몇 가지 매개변수를 제공합니다.

indent 매개변수를 사용하면 최종 JSON 문자열에서 들여쓰기 수준을 지정할 수 있습니다. 예를 들어 JSON 문자열의 각 줄에 4칸 들여쓰기를 추가하고 싶다면 다음과 같이 json.dumps()를 호출하면 됩니다:

employee_json = json.dumps(employee, indent=4)

이 문장을 앞선 예제와 함께 실행하면 다음과 같은 결과가 출력됩니다:

{
    "name": "Linda Richardson",
    "id": 107,
    "probation": false,
    "department": "Sales"
}

또한 JSON 문자열 내 데이터의 구분자(separators)를 변경할 수도 있습니다. 구분자의 기본값은 ", "와 ": "로, 각 항목은 쉼표로, 각 키와 값은 콜론으로 구분됩니다.

예를 들어 키와 값을 등호(=)로 구분하고, 들여쓰기는 4로 지정하고 싶다면 다음 문장을 사용할 수 있습니다:

employee_json = json.dumps(employee, indent=4, separators=(", ", " = "))

코드를 실행하면 다음과 같은 결과가 출력됩니다:

{
    "name" = "Linda Richardson", 
    "id" = 107, 
    "probation" = false, 
    "department" = "Sales"
}

이렇게 JSON 문자열의 모든 키와 값이 등호로 구분되어 출력되는 것을 확인할 수 있습니다.

JSON 파일 읽기

파이썬에서 JSON 파일을 읽으려면 json.load()를 사용합니다. 이 메서드는 하나의 매개변수를 받습니다. 바로 프로그램에서 읽어오고 싶은 파일 객체입니다.

예를 들어 employee.json이라는 파일을 프로그램에 불러오고 싶다고 가정해 봅시다. 이 파일의 내용은 다음과 같습니다:

{"name": "Linda Richardson", "id": 107, "probation": false}

이 파일을 읽어오려면 다음 코드를 사용합니다:

import json

with open('employee.json') as final_file:
	employee = json.load(final_file)

print(employee)

코드를 실행하면 다음과 같은 결과가 출력됩니다:

{"name": "Linda Richardson", "id": 107, "probation": false}

이 코드에서는 먼저 json 라이브러리를 임포트합니다. 그다음 with 문을 사용해 employee.json 파일을 엽니다. json.load() 메서드로 파일 객체에 저장된 내용을 딕셔너리로 변환한 뒤, 딕셔너리의 값을 출력합니다.

JSON을 파일에 쓰기

파이썬에서 JSON을 파일에 저장하려면 json.dump() 메서드를 사용합니다.

json.dump() 메서드는 두 개의 매개변수를 받습니다. 첫 번째는 파일에 쓰고 싶은 딕셔너리이고, 두 번째는 딕셔너리를 저장할 파일 객체입니다.

예를 들어 직원 기록을 JSON 값으로 파일에 저장하고 싶다고 가정해 봅시다. 파일 이름은 linda_employee.json으로 하겠습니다. 다음 코드를 사용하면 됩니다:

import json

employee = {
	"name": "Linda Richardson",
	"id": 107,
	"probation": False,
	"department": "Sales"
}

with open('linda_employee.json', 'w') as final_file:
	json.dump(employee, final_file)

코드를 하나씩 살펴보겠습니다. 먼저 json 모듈을 프로그램에 임포트합니다. 그다음 Linda Richardson이라는 직원 정보를 딕셔너리 구조로 담는 변수를 선언합니다.

이어서 "w"(쓰기) 플래그와 함께 with 문을 사용해 linda_employee.json 파일을 열어 쓸 준비를 합니다. 그런 다음 json.dump()를 사용해 employee 딕셔너리를 JSON 문자열로 변환하고 final_file 객체에 저장합니다.

이 프로그램을 실행하면 employee 딕셔너리의 내용이 linda_employee.json 파일에 기록됩니다. 최종적으로 파일의 내용은 다음과 같습니다:

{"name": "Linda Richardson", "id": 107, "probation": false, "department": "Sales"}

마무리

파이썬 json 모듈을 사용하면 JSON 데이터를 손쉽게 읽고 조작할 수 있습니다.

json 모듈로 할 수 있는 대표적인 작업은 다음과 같습니다:

  • 파일에서 JSON 읽기
  • 딕셔너리를 JSON으로 변환하기
  • JSON을 딕셔너리로 변환하기
  • JSON 문자열을 파일에 쓰기

이 튜토리얼에서는 json 모듈을 사용해 위의 모든 작업을 수행하는 방법을 살펴보았습니다. 이제 여러분도 전문가처럼 파이썬에서 JSON 데이터를 다룰 준비가 되었습니다!