웹사이트 검색

Python XML을 JSON으로, XML을 Dict로


오늘 우리는 파이썬에서 XML을 JSON으로, XML을 Dict로 변환하는 방법을 배웁니다. Python xmltodict 모듈을 사용하여 XML 파일을 읽고 Dict 또는 JSON 데이터로 변환할 수 있습니다. 또한 대용량 XML 파일을 스트리밍하여 사전으로 변환할 수 있습니다. 코딩 부분으로 들어가기 전에 먼저 XML 변환이 필요한 이유를 이해합시다.

XML을 Dict/JSON으로 변환

XML 파일은 서서히 쓸모없게 되었지만 웹에는 여전히 이 형식을 사용하는 꽤 큰 시스템이 있습니다. XML은 JSON보다 무겁기 때문에 대부분의 개발자는 애플리케이션에서 후자를 선호합니다. 애플리케이션이 모든 소스에서 제공하는 XML을 이해해야 하는 경우 XML을 JSON으로 변환하는 것은 지루한 작업이 될 수 있습니다. Python의 xmltodict 모듈을 사용하면 이 작업을 매우 쉽고 간단하게 수행할 수 있습니다.

xmltodict 시작하기

xmltodict 모듈로 시작할 수 있지만 먼저 설치해야 합니다. 주로 pip를 사용하여 설치를 수행합니다.

xmltodict 모듈 설치

다음은 Python Package Index(pip)를 사용하여 xmltodict 모듈을 설치하는 방법입니다.

pip install xmltodict
sudo apt install python-xmltodict

또 다른 장점은 이 모듈에 공식 데비안 패키지가 있다는 것입니다.

파이썬 XML을 JSON으로

이 모듈을 시도하기 가장 좋은 곳은 XML에서 JSON으로의 변환을 수행하기 위해 주로 수행하도록 만들어진 작업을 수행하는 것입니다. 이 작업을 수행할 수 있는 방법에 대한 코드 스니펫을 살펴보겠습니다.

import xmltodict
import pprint
import json

my_xml = """
    <audience>
      <id what="attribute">123</id>
      <name>Shubham</name>
    </audience>
"""

pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(xmltodict.parse(my_xml)))

XML 파일을 JSON으로 변환

코드 자체에 XML 데이터를 유지하는 것이 항상 가능한 것도 아니고 현실적이지도 않습니다. 일반적으로 데이터를 데이터베이스나 일부 파일에 보관합니다. 파일을 직접 선택하고 JSON으로 변환할 수도 있습니다. XML 파일로 변환을 수행하는 방법에 대한 코드 스니펫을 살펴보겠습니다.

import xmltodict
import pprint
import json

with open('person.xml') as fd:
    doc = xmltodict.parse(fd.read())

pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(doc))

Python XML을 Dict로

모듈 이름에서 알 수 있듯이 xmltodict는 실제로 우리가 제공하는 XML 데이터를 단순한 Python 사전으로 변환합니다. 따라서 사전 키로도 간단히 데이터에 액세스할 수 있습니다. 다음은 샘플 프로그램입니다.

import xmltodict
import pprint
import json

my_xml = """
    <audience>
      <id what="attribute">123</id>
      <name>Shubham</name>
    </audience>
"""
my_dict = xmltodict.parse(my_xml)
print(my_dict['audience']['id'])
print(my_dict['audience']['id']['@what'])

XML에서 네임스페이스 지원

XML 데이터에는 일반적으로 XML 파일에서 제공하는 데이터의 범위를 정의하는 일련의 네임스페이스가 있습니다. JSON 형식으로 변환하는 동안 이러한 네임스페이스도 JSON 형식으로 유지되어야 합니다. 이 샘플 XML 파일을 살펴보겠습니다.

<root xmlns="https://defaultns.com/"
        xmlns:a="https://a.com/">
    <audience>
        <id what="attribute">123</id>
        <name>Shubham</name>
    </audience>
</root>

다음은 JSON 형식에 XML 네임스페이스를 포함하는 방법에 대한 샘플 프로그램입니다.

import xmltodict
import pprint
import json

with open('person.xml') as fd:
    doc = xmltodict.parse(fd.read(), process_namespaces=True)

pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(doc))

JSON에서 XML로의 변환

XML에서 JSON으로 변환하는 것이 이 모듈의 주요 목적이지만 xmltodict는 JSON을 XML 형식으로 변환하는 역 작업도 지원합니다. 프로그램 자체에서 JSON 데이터를 제공합니다. 다음은 샘플 프로그램입니다.

import xmltodict

student = {
  "data" : {
    "name" : "Shubham",
    "marks" : {
      "math" : 92,
      "english" : 99
    },
    "id" : "s387hs3"
  }
}

print(xmltodict.unparse(student, pretty=True))
import xmltodict

student = {
    "name" : "Shubham",
    "marks" : {
        "math" : 92,
        "english" : 99
    },
    "id" : "s387hs3"
}

print(xmltodict.unparse(student, pretty=True))

결론

이 수업에서 우리는 XML을 JSON으로 또는 그 반대로 구문 분석하고 변환하는 데 사용할 수 있는 우수한 Python 모듈을 연구했습니다. 또한 xmltodict 모듈을 사용하여 XML을 Dict로 변환하는 방법도 배웠습니다. 참조: API 문서