Programing

Python에서 XML을 JSON으로 변환하는 방법은 무엇입니까?

lottogame 2020. 11. 24. 07:31
반응형

Python에서 XML을 JSON으로 변환하는 방법은 무엇입니까?


중복 가능성 :
Python을 사용하여 XML을 JSON으로 변환?

App Engine에서 일부 작업을 수행 중이며 원격 서버에서 검색되는 XML 문서를 동등한 JSON 객체로 변환해야합니다.

xml.dom.minidom에서 반환되는 XML 데이터를 구문 분석하는 데 사용 하고 urlfetch있습니다. 또한 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)

lxml objectify에 대한 Soviut의 조언은 좋습니다. 특별히 서브 클래 싱 된 simplejson을 사용하면 lxml objectify 결과를 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인스턴스의 encode 메소드에 전달합니다.objectJSONEncoder

Koen의 요점은 여기서 매우 유효합니다. 위의 솔루션은 단순히 중첩 된 xml에서만 작동하며 루트 요소의 이름을 포함하지 않습니다. 이것은 고칠 수 있습니다.

여기에이 수업을 요점에 포함 시켰습니다 : http://gist.github.com/345559


xmltodict (전체 공개 : 내가 작성)는이 "표준"에 따라 XML을 dict + list + string 구조로 변환하는 데 도움이 될 수 있습니다 . 그것은이다 국외 거주자는 그래서 매우 빨리 메모리에 전체 XML 트리를로드 할 필요가 없습니다, 기반.

해당 데이터 구조가 있으면 JSON으로 직렬화 할 수 있습니다.

import xmltodict, json

o = xmltodict.parse('<e> <a>text</a> <a>text</a> </e>')
json.dumps(o) # '{"e": {"a": ["text", "text"]}}'

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>

무슨 말인지 알 겠어요?

Edit: just found this article: http://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html


Jacob Smullyan wrote a utility called pesterfish which uses effbot's ElementTree to convert XML to JSON.


One possibility would be to use Objectify or ElementTree from the lxml module. An older version ElementTree is also available in the python xml.etree module as well. Either of these will get your xml converted to Python objects which you can then use simplejson to serialize the object to JSON.

While this may seem like a painful intermediate step, it starts making more sense when you're dealing with both XML and normal Python objects.


In general, you want to go from XML to regular objects of your language (since there are usually reasonable tools to do this, and it's the harder conversion). And then from Plain Old Object produce JSON -- there are tools for this, too, and it's a quite simple serialization (since JSON is "Object Notation", natural fit for serializing objects). I assume Python has its set of tools.


I wrote a small command-line based Python script based on pesterfesh that does exactly this:

https://github.com/hay/xml2json

참고URL : https://stackoverflow.com/questions/471946/how-to-convert-xml-to-json-in-python

반응형