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

파이썬에서 문자열이 유효한 JSON인지 확인하는 방법

JSON(JavaScript Object Notation)은 여러 컴퓨터 프로그램 사이에서 데이터를 쉽게 주고받기 위해 널리 사용되는 텍스트 기반 데이터 교환 형식입니다. JSON에는 명확한 문법 규칙이 있으며, 파이썬(Python)은 이러한 형식이 올바른지 검증할 수 있습니다. 이번 글에서는 하나의 문자열을 대상으로 json 모듈을 활용해 해당 문자열이 유효한 JSON 형식인지 확인하는 방법을 알아보겠습니다.

json.loads()로 JSON 객체 생성 및 유효성 검사

파이썬의 json 모듈에는 loads()라는 메서드가 포함되어 있습니다. 이 메서드는 유효한 JSON 문자열을 읽어 들여 파이썬 딕셔너리 객체로 변환해 줍니다. 따라서 문자열을 loads()에 전달했을 때 아무 오류 없이 로딩되면 그 문자열은 유효한 JSON이라고 판단할 수 있고, ValueError가 발생하면 잘못된 JSON 형식으로 처리하면 됩니다.

참고로 파이썬 3.5 이상에서는 실제로 ValueError의 하위 클래스인 json.JSONDecodeError가 발생하므로, except 절에 json.JSONDecodeError를 명시적으로 작성하는 것이 더 좋은 습관입니다.

예제 코드

아래 예제에서는 세 가지 경우를 테스트합니다. 첫 번째는 정상적인 JSON 문자열, 두 번째는 값에 따옴표가 빠져 형식이 어긋난 문자열, 세 번째는 중첩(nested) 구조를 가진 JSON입니다.

import json

Astring = '{"Mon" : "2pm", "Wed" : "9pm", "Fri" : "6pm"}'
# 주어진 문자열
print("Given string", Astring)

# JSON 유효성 검사
try:
    json_obj = json.loads(Astring)
    print("A valid JSON")
except ValueError as e:
    print("Not a valid JSON")

# 다시 확인 - 잘못된 형식의 문자열
Astring = '{"Mon" : 2pm, "Wed" : "9pm", "Fri" : "6pm"}'
print("Given string", Astring)

try:
    json_obj = json.loads(Astring)
    print("A valid JSON")
except ValueError as e:
    print("Not a valid JSON")

# 중첩 구조를 가진 JSON
Astring = '{ "Timetable": {"Mon" : "2pm", "Wed" : "9pm"}}'
print("Given string", Astring)

try:
    json_obj = json.loads(Astring)
    print("A valid JSON")
except ValueError as e:
    print("Not a valid JSON")

실행 결과

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

Given string {"Mon" : "2pm", "Wed" : "9pm", "Fri" : "6pm"}
A valid JSON
Given string {"Mon" : 2pm, "Wed" : "9pm", "Fri" : "6pm"}
Not a valid JSON
Given string { "Timetable": {"Mon" : "2pm", "Wed" : "9pm"}}
A valid JSON

정리

두 번째 예제처럼 값에 따옴표가 없으면("Mon" : 2pm) JSON 문법 위반으로 간주되어 유효성 검사에 실패하지만, 중첩 구조의 JSON 역시 올바른 형식이라면 문제없이 통과됩니다. 이처럼 json.loads()를 try-except 블록으로 감싸면 외부 라이브러리 없이 표준 라이브러리만으로 문자열의 JSON 유효성을 간편하게 검사할 수 있습니다. 특히 API 응답이나 설정 파일처럼 외부에서 입력받은 데이터를 처리하기 전에 이 방법을 활용하면 형식 오류로 인한 예외 상황을 미리 방지할 수 있습니다.