파이썬에서는 JSON 형식의 문자열을 함수의 매개변수로 그대로 전달할 수 있습니다. 이때 함수 내부에서 json.loads()를 호출하면 JSON 문자열이 파이썬 딕셔너리(dict) 객체로 변환되어, 일반 딕셔너리처럼 자유롭게 다룰 수 있습니다. 아래 예제를 통해 그 과정을 살펴보겠습니다.
예제 코드
import json
json_string = '{"name":"Rupert", "age": 25, "desig":"developer"}'
print(type(json_string)) # 전달 전 데이터 타입 확인
def func(strng):
a = json.loads(strng) # JSON 문자열 → 파이썬 딕셔너리 변환
print(type(a))
for k, v in a.items(): # 키-값 쌍 순회
print(k, v)
print(dict(a)) # 딕셔너리 형태로 출력
func(json_string)
실행 결과
<class 'str'>
<class 'dict'>
name Rupert
age 25
desig developer
{'name': 'Rupert', 'age': 25, 'desig': 'developer'}
코드 동작 방식
- JSON 문자열 정의: 이름, 나이, 직책 정보를 담은 JSON 문자열을 변수에 저장합니다. 이 시점의 데이터 타입은
str입니다. - 함수 호출: JSON 문자열을 그대로
func()함수의 매개변수로 전달합니다. - json.loads() 변환: 함수 내부에서
json.loads()가 실행되면서 JSON 문자열이dict타입의 딕셔너리로 변환됩니다. - 데이터 활용: 변환된 딕셔너리는
items()메서드로 키-값 쌍을 순회하거나, 키를 통해 특정 값에 바로 접근할 수 있습니다.
알아두면 좋은 점
- JSON 문자열은 함수에 전달된 시점에는 단순한 문자열(
str)이며,json.loads()가 실행된 후에야 딕셔너리로 변환됩니다. - 숫자 값(예:
"age": 25)은 변환 과정에서 자동으로int타입으로 처리됩니다. - 파이썬 2에서 사용되던
iteritems()는 파이썬 3에서 제거되었으므로, 위 예제처럼items()를 사용하는 것이 좋습니다.
대안: 미리 파싱된 딕셔너리 전달하기
JSON을 미리 파싱해 둔 상태라면, 문자열 대신 딕셔너리 객체 자체를 매개변수로 넘기는 것이 더 효율적입니다. 이 경우 함수 내부에서 json.loads()를 반복 호출할 필요가 없어 성능 면에서 유리합니다.
import json
data = json.loads('{"name":"Rupert", "age": 25, "desig":"developer"}')
func(data) # 이미 dict이므로 함수 안에서 바로 사용 가능