RESTful flask API - xml -> json 형태로 변환하기 (파이썬)

반응형

 

이번 포스팅에서는 OpenApi를 이용하여 응답된 정보가 xml일 경우, json으로 변경하는 기능을 설명합니다.

OpenApi와의 통신 방법은 아래의 포스팅에서 확인이 가능합니다.

https://luvris2.tistory.com/302

 

RestApi - 파이썬으로 OpenApi 데이터 통신 하는 방법

이 포스팅은 파이썬 언어를 기준으로 작성되었습니다. 해당 소스 코드는 RestApi의 기본 app이 구동되어있다는 전제하에서 진행하였습니다. RestApi의 기본 구성 및 자세한 설명을 원하면 아래의 포

luvris2.tistory.com


conda 혹은 cmd에서 필요한 모듈 설치

pip install xmltodict, json

xml -> json 데이터 타입 변경

  • xml의 데이터를 json의 형태로 변환하기
xmltodict.parse(변환 할 xml의 데이터)

 

  • json 타입으로 변경하기
json.loads(json.dumps(변경 된 json의 형태를 갖는 데이터))

 

  • json 형태로 변경하는 예시 소스 코드
# json 형태로 변환
# xmlToJsonConverter = json의 형태로 바꾼 데이터를 저장하는 변수
# response = OpenApi 응답 정보를 담고 있는 변수 (xml의 형태로 저장)
xmlToJsonConverter = xmltodict.parse(response.text)

# json 타입으로 변경
# resultList = json 타입으로 변경된 데이터를 저장하는 변수
resultList = json.loads(json.dumps(xmlToJsonConverter))

전체 소스 코드

메인 실행 파일 (app.py)

from flask import Flask
from config import Config
from flask_restful import Api
from resources.kopisApi import KopisApiResource

app = Flask(__name__)

# 환경변수 세팅
app.config.from_object(Config)

api = Api(app)

# 경로와 resource(API코드)를 연결
# 공연 목록 조회 API
api.add_resource(KopisApiResource, '/performancesearch')

 

추가 리소스 파일 (KopisApiResource.py)

class KopisApiResource(Resource):
    def get(self) :

        # 파라미터로 검색 조건 받기
        stdate = request.args['stdate'] # 공연시작일자, 6자로 입력받기 ex) 20220701
        eddate = request.args['eddate'] # 공연종료일자, 6자로 입력받기 ex) 20220801
        cpage = request.args['cpage'] # 현재 페이지, 정수형으로 입력
        rows = request.args['rows'] # 페이지당 목록 수, 정수형으로 입력

        # 파라미터에 들어갈 정보
        params = {
            "service" : Config.KOPIS_ACCESS_KEY,
            "stdate" : stdate,
            "eddate" : eddate,
            "cpage" : cpage,
            "rows" : rows
        }
        
        # 요청하는 API의 URL과 API에서 요구하는 데이터 입력
        response = requests.get(Config.KOPIS_BASE_URL, params=params)

        # json 형태로 변환
        xmlToJsonConverter = xmltodict.parse(response.text)

        # json 타입으로 변경
        resultList = json.loads(json.dumps(xmlToJsonConverter))

        return { "resultList" : resultList['dbs']['db'] }, 200

 

  • 요청 결과

 

반응형