복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    4.Jacob Smullyan은 effbot의 ElementTree를 사용하여 XML을 JSON으로 변환하는 pesterfish라는 유틸리티를 작성했습니다.

    Jacob Smullyan은 effbot의 ElementTree를 사용하여 XML을 JSON으로 변환하는 pesterfish라는 유틸리티를 작성했습니다.

  5. ==============================

    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. ==============================

    6.일반적으로 XML에서 일반 언어로 된 객체로 이동하려고합니다 (일반적으로이를 수행 할 수있는 합리적인 도구가 있기 때문에 더 어렵습니다). 그리고 나서 Plain Old Object에서 JSON을 생성합니다.이 도구도 있습니다. JSON이 객체를 직렬화하기에 자연스러운 "Object Notation"이기 때문에 아주 간단한 직렬화입니다. 나는 파이썬이 툴 세트를 가지고 있다고 가정한다.

    일반적으로 XML에서 일반 언어로 된 객체로 이동하려고합니다 (일반적으로이를 수행 할 수있는 합리적인 도구가 있기 때문에 더 어렵습니다). 그리고 나서 Plain Old Object에서 JSON을 생성합니다.이 도구도 있습니다. JSON이 객체를 직렬화하기에 자연스러운 "Object Notation"이기 때문에 아주 간단한 직렬화입니다. 나는 파이썬이 툴 세트를 가지고 있다고 가정한다.

  7. ==============================

    7.필자는 pesterfesh를 기반으로하는 작은 명령 행 기반 Python 스크립트를 작성했습니다.

    필자는 pesterfesh를 기반으로하는 작은 명령 행 기반 Python 스크립트를 작성했습니다.

    https://github.com/hay/xml2json

  8. from https://stackoverflow.com/questions/471946/how-to-convert-xml-to-json-in-python by cc-by-sa and MIT license