JSON 파일이란?
JSON(JavaScript Object Notation)은 경량 데이터 교환 방식으로, 데이터를 텍스트 형식으로 표현한 것입니다. JSON 형식은 JavaScript에서 객체를 표현하는 방식을 따르고 있기 때문에, JavaScript와 다른 언어 간에 데이터를 교환할 때 자주 사용되고 있습니다.
JSON 파일의 형식은 파이썬의 딕셔너리(Dictionary)와 형식이 거의 유사하다고 할 수 있습니다.
- 데이터는 키-값(key-value pair)으로 표현됩니다.
- 키는 문자열이고, 값은 문자열, 숫자, 불리언(true/false), 객체, 배열 또는 null일 수 있습니다.
- 객체는 중괄호({})로 둘러싸이며, 키-값 쌍을 쉼표(,)로 구분합니다.
- 배열은 대괄호([])로 둘러싸이며, 값들을 쉼표(,)로 구분합니다.
이번 글의 예시에서는 아래와 같은 JSON 객체를 가지고 진행할 것입니다. 유저 정보를 JSON 형식으로 나타낸 것으로 JSON 객체 내부에 또 다른 객체인 배열과 딕셔너리를 포함하고 있습니다.
# test.json 파일
user_ditc = {
"name" : "BAEK",
"age" : 26,
"gender" : "man",
"phone" : "010-1111-2222",
"email" : "hello@naver.com",
"address" : {
"city" :"SEOUL",
"zipcode" : 11111
},
"hobby" : [
"soccer", "baseball", "dance"
]
}
json 모듈 사용
json 모듈은 파이썬 내장 모듈 중 하나로, JSON 데이터를 파싱하고, 생성하는 모듈입니다.
json 모듈은 별도의 설치 과정 없이 아래와 같이 import를 진행하여 사용할 수 있습니다.
import json
json.dump & json.load
json.dump는 파이썬 객체를 JSON 형식으로 직렬화 하여 파일에 쓰는 함수입니다.
이 함수는 인자로 들어온 파이썬 객체를 JSON 형식으로 변환하여 파일에 저장합니다.
이때, 파일에는 JSON 형식으로 변환된 문자열이 쓰여지게 됩니다.
직렬화란?
데이터 구조나 객체를 저장하거나 전송하기 쉽게 스트림 형태로 변환하는 과정입니다.
이렇게 변환된 데이터는 파일에 저장하거나 네트워크를 통해 전송할 수 있습니다.
필요한 경우 역직렬화를 통해 다시 원래의 데이터 구조나 객체로 복원할 수 있습니다.
아래 코드는 dump 함수를 사용하여 파이썬 객체를 JSON 형식으로 변환하여 'test.json' 파일에 저장합니다.
import json
user_ditc = {
"name" : "BAEK",
"age" : 26,
"gender" : "man",
"phone" : "010-1111-2222",
"email" : "hello@naver.com",
"address" : {
"city" :"SEOUL",
"zipcode" : 11111
},
"hobby" : [
"soccer", "baseball", "dance"
]
}
# 파일 저장
with open('./test.json', 'w') as f:
json.dump(user_ditc, f, indent=2)
dump 함수에 첫 번째 인자값으로 파일에 저장할 데이터를 전달합니다.
두 번째 인자값으로는 파일 이름을 전달하는데, 위 코드에서는 알리아스인 'f' 를 전달하였습니다.
세 번째 인자값으로는 JSON 형식의 데이터를 이쁘게 저장하기 위해 indent 를 넣어주었습니다. 해당 속성을 사용함으로써 보다 보기 편하게 데이터를 저장합니다. 위 코드는 2칸 공백으로 들여쓰기 합니다.
json.load는 파일에 JSON 데이터를 읽어들여, 파이썬 객체로 역직렬화(Deserializing)하는 함수입니다.
load 함수는 인자로 들어온 파일 객체에서 JSON 형식의 데이터를 읽어들여, 파이썬의 기본 데이터 타입(문자열, 숫자, 리스트, 딕셔너리 등)으로 변환합니다.
아래 코드에서는 load 함수를 사용하여 이전에 만들어놓은 'test.json' 파일에서 JSON 형식의 데이터를 읽어들여, 파이썬 객체로 변환하여 출력합니다.
# 파일 불러오기
with open('./test.json', 'r') as f:
user_json = json.load(f)
print(type(user_json)) # Dict
print(user_json)
가볍게 JSON 파일을 작성하고 읽어오는 방법에 대해 알아보았습니다.
이번에는 조금 헷갈릴 수 있는 dumps 함수와 loads 함수에 대해 알아보도록 하겠습니다. 위에서 배운 dump, load 함수에서 s 만 붙었기 때문에 처음 배우실때는 헷갈릴 수 있기에 잘 알아두시길 바랍니다.
json.dumps & json.loads
json.dumps는 파이썬 객체를 JSON 형식으로 직렬화(Serializing)하는 함수입니다.
즉, 파이썬 객체를 문자열로 반환하는 역할을 합니다.
이 함수는 인자로 들어온 Pythone 객체를 JSON 형식으로 변환하여 문자열로 반환합니다.
아래 코드는 'test.json' 파일을 읽어와(load) 해당 데이터의 타입과 값을 출력해보는 예제입니다.
추가로 해당 데이터의 값을 변경하고 dumps 함수를 통해 문자열로 변경 후 데이터의 타입과 값을 출력합니다.
with open('./test.json', 'r') as f:
user_json = json.load(f)
# test.json 파일에서 읽어온 데이터 출력
print(type(user_json))
print(user_json)
# 읽어온 데이터의 값을 변경
user_json["name"] = "KIM"
user_json['age'] = 30
user_json["address"]["city"] = "INCHEON"
user_json["hobby"].append('movie')
# 객체를 문자열로 변환, Dict -> Str
user_str = json.dumps(user_json, indent=2)
print(type(user_str))
print(user_str)
위에서 indent 속성을 사용함으로써 처음에 출력된 데이터보다 편리하게 읽을 수 있게 출력 됩니다.
json.loads는 JSON 형식의 문자열을 파이썬 객체로 역직렬화(Deserializing)하는 함수입니다.
즉, 문자열을 파이썬 객체로 변환하는 역할을 합니다.
이 함수는 인자로 들어온 JSON 형식의 문자열을 파싱하여, 파이썬의 기본 데이터 타입(문자열, 숫자, 리스트, 딕셔너리 등)으로 변환합니다.
아래 코드는 위 예제에서 진행했던 dumps 함수로 문자열로 변경되었던 데이터를 다시 파이썬 객체로 변환하여 'test.json' 파일에 저장하는 코드입니다. 즉, 이번 글에서 작성했던 예제는 파일을 생성하고, 파일을 수정하는 방법이라고 보시면 되겠습니다.
user_json2 = json.loads(user_str)
with open('./test.json', 'w') as f:
json.dump(user_json2, f, indent=2)
파일을 수정할 때, 굳이 문자열로 변경해서 다시 객체로 변환하는 것은 불필요합니다.
단지, 위 예제는 이해를 돕기위해 진행한 예제이고 실제로 주로 사용되는 사례 중 하나로 requests 모듈을 사용하여 HTTP 통신으로 받은 데이터를 JSON 객체로 변환하여 데이터를 다루는데 사용되고 있습니다.
'Python' 카테고리의 다른 글
[Python] 일급 함수 정의와 특징 (0) | 2025.01.25 |
---|---|
[Python] Namedtuple 사용방법 (1) | 2025.01.22 |
[Python] glob 모듈을 사용하여 파일 탐색하기 (0) | 2025.01.20 |
[Python] os 모듈 사용방법 - 파이썬을 사용하여 파일을 생성하고 읽고 써보자 (0) | 2025.01.19 |
[Python] map() filter() reduce() 사용법 정리 (0) | 2025.01.17 |