[PYTHON] 파이썬에서 XML을 JSON으로 변환하는 방법은 무엇입니까? [복제]
PYTHON파이썬에서 XML을 JSON으로 변환하는 방법은 무엇입니까? [복제]
App Engine에 대한 작업을하고 있으며 원격 서버에서 가져온 XML 문서를 동등한 JSON 객체로 변환해야합니다.
urlfetch에 의해 반환되는 XML 데이터를 구문 분석하기 위해 xml.dom.minidom을 사용하고 있습니다. 또한 django.utils.simplejson을 사용하여 구문 분석 된 XML 문서를 JSON으로 변환하려고합니다. 저는 두 사람을 서로 연결하는 방법에 관해서는 완전히 손해보고 있습니다. 아래는 내가 땜질하려는 코드이다.
from xml.dom import minidom
from django.utils import simplejson as json
#pseudo code that returns actual xml data as a string from remote server.
result = urlfetch.fetch(url,'','get');
dom = minidom.parseString(result.content)
json = simplejson.load(dom)
self.response.out.write(json)
해결법
-
==============================
1.Soviut의 lxml 객체화에 대한 조언은 훌륭합니다. 특수하게 서브 클래 싱 된 simplejson을 사용하면 lxml 객체화 결과를 json으로 변환 할 수 있습니다.
Soviut의 lxml 객체화에 대한 조언은 훌륭합니다. 특수하게 서브 클래 싱 된 simplejson을 사용하면 lxml 객체화 결과를 json으로 변환 할 수 있습니다.
import simplejson as json import lxml class objectJSONEncoder(json.JSONEncoder): """A specialized JSON encoder that can handle simple lxml objectify types >>> from lxml import objectify >>> obj = objectify.fromstring("<Book><price>1.50</price><author>W. Shakespeare</author></Book>") >>> objectJSONEncoder().encode(obj) '{"price": 1.5, "author": "W. Shakespeare"}' """ def default(self,o): if isinstance(o, lxml.objectify.IntElement): return int(o) if isinstance(o, lxml.objectify.NumberElement) or isinstance(o, lxml.objectify.FloatElement): return float(o) if isinstance(o, lxml.objectify.ObjectifiedDataElement): return str(o) if hasattr(o, '__dict__'): #For objects with a __dict__, return the encoding of the __dict__ return o.__dict__ return json.JSONEncoder.default(self, o)
사용법의 예는 docstring을 참조하십시오. 본질적으로 lxml objectify의 결과를 objectJSONEncoder 인스턴스의 encode 메소드에 전달합니다
Koen의 요지는 여기에서 매우 유효합니다. 위의 솔루션은 단순히 중첩 된 xml에만 적용되며 루트 요소의 이름은 포함하지 않습니다. 이것은 고칠 수 있습니다.
나는이 수업을 요점에 포함시켰다 : http://gist.github.com/345559
-
==============================
2.xmltodict (완전 공개 : 나는 그것을 썼다.)는이 "표준"에 따라 XML을 dict + list + string 구조체로 변환하는 것을 도울 수있다. Expat 기반이므로 매우 빠르며 전체 XML 트리를 메모리에로드 할 필요가 없습니다.
xmltodict (완전 공개 : 나는 그것을 썼다.)는이 "표준"에 따라 XML을 dict + list + string 구조체로 변환하는 것을 도울 수있다. Expat 기반이므로 매우 빠르며 전체 XML 트리를 메모리에로드 할 필요가 없습니다.
해당 데이터 구조가 있으면 JSON으로 직렬화 할 수 있습니다.
import xmltodict, json o = xmltodict.parse('<e> <a>text</a> <a>text</a> </e>') json.dumps(o) # '{"e": {"a": ["text", "text"]}}'
-
==============================
3.필자는 XML 형식이 너무 다양하여 매우 엄격하게 정의 된 XML 형식없이이 작업을 수행 할 수있는 코드를 작성할 수 없다고 생각합니다. 여기 내 뜻이 있습니다 :
필자는 XML 형식이 너무 다양하여 매우 엄격하게 정의 된 XML 형식없이이 작업을 수행 할 수있는 코드를 작성할 수 없다고 생각합니다. 여기 내 뜻이 있습니다 :
<persons> <person> <name>Koen Bok</name> <age>26</age> </person> <person> <name>Plutor Heidepeen</name> <age>33</age> </person> </persons>
될 것이라고
{'persons': [ {'name': 'Koen Bok', 'age': 26}, {'name': 'Plutor Heidepeen', 'age': 33}] }
그러나 이것이 무엇일까요?
<persons> <person name="Koen Bok"> <locations name="defaults"> <location long=123 lat=384 /> </locations> </person> </persons>
무슨 뜻인지 알 겠어?
편집 : 방금이 기사를 찾았습니다. http://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html
-
==============================
4.Jacob Smullyan은 effbot의 ElementTree를 사용하여 XML을 JSON으로 변환하는 pesterfish라는 유틸리티를 작성했습니다.
Jacob Smullyan은 effbot의 ElementTree를 사용하여 XML을 JSON으로 변환하는 pesterfish라는 유틸리티를 작성했습니다.
-
==============================
5.한 가지 가능성은 lxml 모듈에서 Objectify 또는 ElementTree를 사용하는 것입니다. 이전 버전 인 ElementTree는 python xml.etree 모듈에서도 사용할 수 있습니다. 이들 중 하나는 XML을 Python 객체로 변환 한 다음 simplejson을 사용하여 JSON으로 객체를 직렬화합니다.
한 가지 가능성은 lxml 모듈에서 Objectify 또는 ElementTree를 사용하는 것입니다. 이전 버전 인 ElementTree는 python xml.etree 모듈에서도 사용할 수 있습니다. 이들 중 하나는 XML을 Python 객체로 변환 한 다음 simplejson을 사용하여 JSON으로 객체를 직렬화합니다.
이 과정은 고통스런 중간 단계처럼 보일 수 있지만, XML과 일반 Python 객체를 모두 처리 할 때는 더 이해하기 시작합니다.
-
==============================
6.일반적으로 XML에서 일반 언어로 된 객체로 이동하려고합니다 (일반적으로이를 수행 할 수있는 합리적인 도구가 있기 때문에 더 어렵습니다). 그리고 나서 Plain Old Object에서 JSON을 생성합니다.이 도구도 있습니다. JSON이 객체를 직렬화하기에 자연스러운 "Object Notation"이기 때문에 아주 간단한 직렬화입니다. 나는 파이썬이 툴 세트를 가지고 있다고 가정한다.
일반적으로 XML에서 일반 언어로 된 객체로 이동하려고합니다 (일반적으로이를 수행 할 수있는 합리적인 도구가 있기 때문에 더 어렵습니다). 그리고 나서 Plain Old Object에서 JSON을 생성합니다.이 도구도 있습니다. JSON이 객체를 직렬화하기에 자연스러운 "Object Notation"이기 때문에 아주 간단한 직렬화입니다. 나는 파이썬이 툴 세트를 가지고 있다고 가정한다.
-
==============================
7.필자는 pesterfesh를 기반으로하는 작은 명령 행 기반 Python 스크립트를 작성했습니다.
필자는 pesterfesh를 기반으로하는 작은 명령 행 기반 Python 스크립트를 작성했습니다.
https://github.com/hay/xml2json
from https://stackoverflow.com/questions/471946/how-to-convert-xml-to-json-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서 나선형 배열을 만드는가? (0) | 2018.11.16 |
---|---|
[PYTHON] Django 전환, 코드 블록을위한 언어 전환, 하나의 언어로 번역 수행 (0) | 2018.11.16 |
[PYTHON] 무기한 체에 휠 분해능 추가하기 (0) | 2018.11.16 |
[PYTHON] 파이썬 numpy : datetime64 [ns]를 datetime64 [D] (Numba와 함께 사용)로 변환 할 수 없습니다. (0) | 2018.11.16 |
[PYTHON] Windows 용 Python C 확장 모듈 빌드하기 (0) | 2018.11.16 |