두가지 모듈의 차이점에 대하여 정리
구글링을 하면 보통 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 |