Python/Python__works

python json to xml OR xml to json ... 과연 정확하게 되고 있는가?

말하는감자 2019. 9. 18. 11:36

두가지 모듈의 차이점에 대하여 정리

구글링을 하면 보통 xmltodict를 많이 추천하는데 치명적 문제(?) 가 있었다.

 

request 는 json으로 받는다

json 데이터를 xml로 변환 한다

python의 requests 를 이용해서 api에 호출을 한다. 이때 data는 방금 변환한 xml를 사용한다.

이때 api에 호출이 불가능했습니다. 왜 그랬을까요 ㅠㅡㅠ?

 

일단 설치

pip install xmltodict
pip install json2xml

 

임포트 해주세요

import json
import xmltodict
from json2xml import json2xml, readfromstring

 

xmltodict를 이용해서 변환 해보겠습니다.

 

테스트용 xml

<?xml version="1.0" encoding="utf-8"?>
    <message>
        <test1>
            <asdf1>asdf1</asdf1>
        </test1>
        <test2>
        	<asdf2>asdf2</asdf2>
        </test2>
    </message>

 

xml -> json

with open('D:/git/test.xml') as fd:
    doc = xmltodict.parse(fd.read())
data = json.dumps(doc)

 

json -> xml

#json_string은 방금 위에서 변환한 json 데이터를 그대로 썼습니다

json_string = str(data).replace("'", '"')
xml_string = xmltodict.unparse(json.loads(json_string), pretty=True)

 

이때 xml_string과 테스트용 xml을 print로 출력해서 보면 똑같게 보일겁니다(나도 속음 ㅠㅠ)

하지만 실제로 얘들은 정확하게 변환되지 않았어여.......... 

걍 겉보기에만 어중간한 애들입니다. 흠... 아마 변환 과정에서 트리 구조같은게 정확하게 고려되지 않은듯?

 

증거

하나는 xml을 텍스트로 붙인거고 하나는 xml -> dict(json) -> xml 로 변환해온겁니다.

정확하게 일치하지 않습니다.

 

 

이 변환된 말도 안되는 xml을 가지고 requests로 api를 호출해도 1도 호출되지 않습니다 ㅂㄷㅂㄷ

그래서 검색해보니 json2xml 이란게 있더군여

열심히 인터넷 튜토리얼 보고 따라했는데 안됨 ^^... 걍 공식 Doc 보고 따라하니 잘 됨... 

json_string = str(data).replace("'", '"')
from_string = readfromstring(json_string)
xml_string = json2xml.Json2xml(from_string, indent=8).to_xml()

 

결론

xml 을 안쓰려고 잔머리 굴리지 말고 tree 탐색 공부를 하자.

만약 변환을 해야한다면 json2xml을 쓰자

 

 

'Python > Python__works' 카테고리의 다른 글

xml 파일 열어서 dict 변환후에 데이터 만져주기~  (0) 2019.09.20
requests  (0) 2019.09.19
openpyxl  (0) 2019.07.18
lambda  (0) 2019.07.14
python lambda  (0) 2019.07.14