본문 바로가기
IT/파이썬 기초 완전 정복

파이썬으로 JSON 데이터 다루기 (23)

by 지식 발전소 2024. 4. 21.
728x90
반응형

 

JSON이란 무엇인가?

안녕하세요. 오늘은 파이썬으로 JSON(JavaScript Object Notation) 데이터를 다루는 방법에 대해 알아보겠습니다. 먼저 JSON이 무엇인지부터 짚고 가겠습니다.

 

JSON이란 무엇일까요? JSON은 간단한 데이터 교환 형식입니다. 사람이 읽고 쓰기 쉬운 텍스트 포맷으로 구조화된 데이터를 표현할 수 있습니다.

 

JSON은 키-값 쌍으로 이루어져 있으며, 이 값에는 숫자, 문자열, 불린값, null, 객체, 배열 등이 올 수 있습니다. 이처럼 JSON의 구조가 매우 간단하고 가벼운 것이 장점입니다.

 

왜 JSON을 배워야 할까요? 최근 웹 애플리케이션이나 모바일 앱에서 JSON 데이터 형식이 매우 많이 사용되고 있습니다. 서버와 클라이언트 간 데이터를 주고받을 때 JSON 포맷을 사용하는 것이 일반적입니다.

 

따라서 JSON 데이터를 잘 다룰 수 있어야 다양한 애플리케이션을 개발할 수 있습니다. 파이썬은 JSON 데이터 처리를 위한 내장 모듈을 제공하므로 JSON 관련 작업을 매우 편리하게 수행할 수 있습니다.

 

이번 기회에 JSON의 기초와 파이썬으로 JSON을 다루는 방법을 확실히 익혀두시기 바랍니다.

JSON 기본 문법

JSON의 기본 문법을 알아보겠습니다. JSON 데이터는 객체나 배열로 이루어집니다.

객체란 키-값 쌍으로 이루어진 컬렉션입니다. 중괄호 {}로 묶여 있으며, 각 키-값 쌍은 콜론 :으로 구분됩니다.

{
  "name": "Alice",
  "age": 25,
  "email": "alice@example.com"
}

배열은 값들의 순서가 있는 리스트입니다. 대괄호 []로 묶여 있으며, 각 값들은 쉼표 ,로 구분됩니다.

[25, 30, 27, 33]

객체와 배열은 서로 중첩될 수도 있습니다.

{
  "students": [
    {"name": "Alice", "grade": 4.3},
    {"name": "Bob", "grade": 3.7}
  ]
}

 

객체의 값으로 배열이 들어갈 수 있고, 배열의 요소로 객체가 들어갈 수 있습니다. 중첩된 구조를 이용해 복잡한 데이터를 표현할 수 있습니다.

 

JSON의 키는 반드시 쌍따옴표로 묶어야 합니다. 그리고 JSON 데이터는 문자열, 숫자, 불린값, null값만 표현할 수 있습니다. 파이썬에서 지원하는 다른 자료형은 변환 과정이 필요합니다.

파이썬으로 JSON 데이터 다루기

파이썬에는 JSON 데이터 처리를 위한 json 모듈이 내장되어 있습니다. json 모듈을 이용하면 JSON 데이터의 직렬화(Serialization)와 역직렬화(Deserialization)가 가능합니다.

 

직렬화란 객체나 데이터 구조를 스트림 형태로 변환하는 것을 말합니다. 반대로 역직렬화는 스트림 형태의 데이터를 객체나 데이터 구조로 변환하는 것입니다.

JSON 객체 -> 파이썬 데이터 구조 (역직렬화)

JSON 데이터를 파이썬의 딕셔너리나 리스트 등으로 변환하는 방법입니다. json.loads() 함수를 사용합니다. 예제에서 자세히 살펴보겠습니다.

import json

# JSON 문자열
json_string = """
{
  "name": "Alice",
  "age": 25,
  "email": "alice@example.com",
  "skills": ["Python", "JavaScript"]
}
"""

# JSON 문자열을 파이썬 딕셔너리로 변환
data = json.loads(json_string)
print(type(data))  # <class 'dict'>
print(data)
# {'name': 'Alice', 'age': 25, 'email': 'alice@example.com', 'skills': ['Python', 'JavaScript']}

 

위 예제에서 json.loads()를 통해 JSON 문자열을 파이썬 딕셔너리로 역직렬화했습니다. JSON 객체의 키-값 쌍이 딕셔너리의 키-값 쌍으로 변환되었습니다. JSON 배열은 파이썬 리스트로 변환되었습니다.

 

왜 JSON 데이터를 역직렬화할까요? 우리가 처리해야 할 데이터가 JSON 형식으로 주어지는 경우가 많습니다. JSON 데이터를 그대로 사용하기 전에 파이썬 자료구조로 변환하면 훨씬 쉽게 데이터를 가공하고 처리할 수 있습니다.

 

그렇다면 반대로 파이썬 데이터 구조를 JSON 데이터로 변환하는 과정인 직렬화는 어떻게 할까요?

파이썬 데이터 구조 -> JSON 객체 (직렬화)

파이썬의 딕셔너리나 리스트 등을 JSON 데이터로 변환하는 방법입니다. json.dumps() 함수를 사용합니다.

import json

data = {
    "name": "Alice", 
    "age": 25,
    "email": "alice@example.com",
    "skills": ["Python", "JavaScript"]
}

# 파이썬 딕셔너리를 JSON 문자열로 변환
json_string = json.dumps(data)
print(type(json_string))  # <class 'str'>
print(json_string)
# {"name": "Alice", "age": 25, "email": "alice@example.com", "skills": ["Python", "JavaScript"]}

 

위 예제에서 json.dumps()를 통해 파이썬 딕셔너리를 JSON 문자열로 직렬화했습니다. 파이썬 딕셔너리가 JSON 객체로, 리스트는 JSON 배열로 변환되었습니다.

 

왜 파이썬 데이터 구조를 직렬화할까요? 서버와 클라이언트 간 데이터를 주고받을 때, 일반적으로 JSON 형식을 사용합니다. 따라서 파이썬 데이터 구조를 JSON으로 변환한 뒤 네트워크를 통해 전송해야 합니다.

 

json.dumps()의 중요한 인자들

  • ensure_ascii=False: 기본적으로 비 ASCII 문자는 이스케이프 시퀀스로 출력됩니다. False로 지정하면 원래 문자 그대로 출력됩니다.
  • indent=4: 들여쓰기 단계를 지정합니다. 가독성을 위해 JSON 문자열을 예쁘게 출력할 때 사용합니다.
  • sort_keys=True: 키를 기준으로 딕셔너리를 정렬하여 출력합니다.
data = {
    "이름": "Alice",
    "나이": 25  
}

json_string = json.dumps(data, ensure_ascii=False, indent=4, sort_keys=True)
print(json_string)
{
    "나이": 25,
    "이름": "Alice"
}

JSON 파일 다루기

지금까지는 JSON 문자열을 직접 다뤘습니다. 하지만 실제로는 JSON 데이터가 파일에 저장되어 있는 경우가 많습니다. 이번에는 파일로부터 JSON 데이터를 읽고 쓰는 방법을 알아보겠습니다.

JSON 파일 읽기

import json

with open("data.json", "r", encoding="utf-8") as f:
    data = json.load(f)
    print(data)

위 코드는 data.json 파일에서 JSON 데이터를 읽어옵니다. json.load() 함수는 파일 핸들러를 입력으로 받아 그 파일에 저장된 JSON 데이터를 역직렬화합니다.

with 문을 사용하면 파일을 열고 자동으로 닫습니다. 따라서 close() 메서드를 호출할 필요가 없습니다.

JSON 파일 쓰기

import json

students = [
    {"name": "Alice", "grade": 4.3},
    {"name": "Bob", "grade": 3.8}
]

with open("students.json", "w", encoding="utf-8") as f:
    json.dump(students, f, ensure_ascii=False, indent=4)

위 코드는 students.json 파일에 JSON 데이터를 씁니다. json.dump() 함수는 첫 번째 인자로 데이터를, 두 번째 인자로 파일 핸들러를 받습니다.

encoding="utf-8"을 지정하여 유니코드 문자를 포함한 데이터를 올바르게 쓸 수 있습니다. ensure_ascii=False와 indent=4를 지정했습니다.

실전 예제: API에서 JSON 데이터 다루기

웹 개발에서는 외부 API를 통해 JSON 데이터를 주고받는 일이 많습니다. 이번 예제에서는 OpenWeatherMap API를 이용해 실제로 JSON 데이터를 활용해보겠습니다.

import json
import requests

# API 키를 사용하여 요청 URL 구성
API_KEY = "YOUR_API_KEY"  # 실제 키로 교체하세요
CITY = "Seoul"  # 서울
API_URL = f"http://api.openweathermap.org/data/2.5/weather?q={CITY}&appid={API_KEY}"

# JSON 데이터 요청
response = requests.get(API_URL)

# JSON 데이터 -> 파이썬 딕셔너리로 역직렬화
data = json.loads(response.text) 

# 필요한 정보 추출
weather = data["weather"][0]["description"]
temperature = data["main"]["temp"] - 273.15  # 켈빈에서 섭씨로 변환
humidity = data["main"]["humidity"]

print(f"{CITY}의 날씨는 '{weather}' 입니다.")
print(f"현재 기온은 {temperature:.1f}°C 입니다.")
print(f"현재 습도는 {humidity}% 입니다.")

위 코드는 OpenWeatherMap API로부터 도시 정보를 요청하여 날씨, 기온, 습도를 출력합니다. 요청 결과는 JSON 형식이므로 json.loads()로 딕셔너리로 변환합니다.

그리고 딕셔너리에서 필요한 데이터를 찾아 원하는 형태로 가공하여 출력합니다. response.text로 응답 본문의 JSON 데이터에 접근할 수 있습니다.

실행 결과:

Seoul의 날씨는 'broken clouds' 입니다. 
현재 기온은 25.0°C 입니다.
현재 습도는 45% 입니다.

 

이처럼 JSON 데이터를 잘 다룰 수 있으면 웹 API뿐만 아니라 데이터 교환이 필요한 어디에서나 파이썬을 활용할 수 있습니다.

참고 자료

  1. Python 3 Documentation, JSON - Python Documentation https://docs.python.org/3/library/json.html
  2. Stack Overflow, Working with JSON data in Python https://stackoverflow.com/questions/7771011/how-to-get-data-in-json-format-using-python
  3. Geeks for Geeks, JSON data in Python https://www.geeksforgeeks.org/json-data-in-python/
  4. Real Python, Python JSON https://realpython.com/python-json/

 

 

한 고대 문서 이야기

여기 한 고대 문서가 있습니다. 이 문서는 B.C. 1,500년 부터 A.D 100년까지 약 1,600 여 년 동안 기록되었습니다. 이 문서의 저자는 약 40 명입니다. 이 문서의 고대 사본은 25,000 개가 넘으나, 사본간 오

gospel79.tistory.com

 

유튜브 프리미엄 월 1만원 할인받고 월 4000원에 이용하는 방법

올해 5월부터 월 8000원 정도이던 유튜브 프리미엄 요금이 15000원 정도로 인상됩니다. 각종 OTT 서비스, ChatGPT 같은 서비스들이 늘어나다보니 이런 거 몇 개만 이용하더라도 월 이용요금이 5만원을

stock79.tistory.com

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형

댓글