Как я могу конвертировать XML-файл в JSON с помощью Python? - PullRequest
7 голосов
/ 24 июня 2011

У меня есть XML-файл, который я хочу преобразовать в JSON-файл с использованием python, но его нет для меня.

<?xml version="1.0"?>
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>

Приведенный выше XML-файл я анализирую с помощью ElementTree и передаю его Simplejsonчтобы сериализовать так:

from xml.etree import ElementTree as ET
import simplejson

tree = ET.parse(Xml_file_path)
simplejson.dumps(tree)

Это дает мне ошибку: TypeError: xml.etree.ElementTree.ElementTree объект в 0x00C49DD0 не сериализуем JSON.

Ответы [ 3 ]

17 голосов
/ 18 апреля 2012

Другой вариант - 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"]}}'
7 голосов
/ 24 июня 2011

Это, вероятно, то, что вы ищете:

https://github.com/mutaku/xml2json

import xml2json

s = '''<?xml version="1.0"?>
<note>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Reminder</heading>
   <body>Don't forget me this weekend!</body>
</note>'''
print xml2json.xml2json(s)
2 голосов
/ 06 декабря 2017

Вы можете попробовать использовать xmljson .Код для того же -

from xmljson import badgerfish as bf
from xml.etree.ElementTree import fromstring
s = '''<?xml version="1.0"?>
<note>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Reminder</heading>
   <body>Don't forget me this weekend!</body>
</note>'''
json.dumps(bf.data(fromstring(s)))
...