Converter XML em JSON em Python
Neste tutorial, veremos o método para converter XML em JSON em Python. O formato JSON é mais simples de ler e gravar do que o formato XML; seu estilo compacto e leve também melhora o desempenho do sistema, especialmente em APIs RESTful. Como JSON é melhor que XML em muitos aspectos, ele é usado como um substituto para XML em muitos campos.
Agora, suponha que temos dados salvos no formato XML e queremos convertê-los para o formato JSON; podemos converter os dados XML em JSON em Python usando o método a seguir.
Converter XML em JSON em Python usando o módulo xmltodict
Em Python, temos o método json.dumps(obj)
que pega os dados como argumento obj
e os serializa como o fluxo formatado em JSON e retorna os dados formatados como saída.
O argumento obj
pode ser um dicionário, string, lista ou tupla, etc, o método json.dumps()
converte o obj
de acordo com seu tipo de dados. Como se precisássemos de um objeto JSON, teremos que fornecer a entrada como um dicionário, já que o método json.dumps()
converte o dicionário para o objeto JSON. O tipo de lista ou tupla é convertido em array JSON e o tipo de string em string JSON.
Podemos usar o método xmltodict.parse()
para converter os dados XML para o tipo de dados do dicionário Python. O método xmltodict.parse()
usa dados de formato XML como uma string, analisa os dados e retorna a saída como um dicionário.
Depois de converter os dados em um dicionário usando o método xmltodict.parse()
, podemos usar o método json.dumps()
para converter os dados para o objeto JSON.
O código de exemplo a seguir demonstra como converter os dados XML em JSON usando os métodos json.dumps()
e xmltodict.parse()
em Python.
import xmltodict
import json
dictionary = xmltodict.parse(
"""<note>
<date>2021-03-07</date>
<time>15:23</time>
<to>Sara</to>
<from>Khan</from>
<msg>Let's meet this weekend!</msg>
</note>"""
)
json_object = json.dumps(dictionary)
print(json_object)
Resultado:
{"note": {"date": "2021-03-07", "time": "15:23", "to": "Sara", "from": "Khan", "msg": "Let's meet this weekend!"}}