Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Python melaksanakan penukaran antara XML dan JSON

Python melaksanakan penukaran antara XML dan JSON

WBOY
WBOYasal
2023-08-07 19:10:494317semak imbas

Python melaksanakan penukaran antara XML dan JSON

Python melaksanakan penukaran antara XML dan JSON

Pengenalan:
Dalam proses pembangunan harian, kita selalunya perlu menukar data antara format yang berbeza. XML dan JSON ialah format pertukaran data biasa Dalam Python, kita boleh menggunakan pelbagai perpustakaan untuk mencapai penukaran bersama antara XML dan JSON. Artikel ini akan memperkenalkan beberapa kaedah yang biasa digunakan, dengan contoh kod.

1. XML ke JSON
Dalam Python, kita boleh menggunakan modul xml.etree.ElementTree untuk menghuraikan dan menjana XML. Sebaliknya gunakan modul json untuk menghuraikan dan menjana JSON. Berikut ialah contoh menukar XML kepada JSON:

import xml.etree.ElementTree as ET
import json

def xml_to_json(xml_string):
    root = ET.fromstring(xml_string)
    return json.dumps({root.tag: xml_to_dict(root)})

def xml_to_dict(element):
    d = {}
    if element.attrib:
        d["@attributes"] = element.attrib
    if element.text:
        d[element.tag] = element.text
    for child in element:
        child_data = xml_to_dict(child)
        if child.tag in d:
            if type(d[child.tag]) is list:
                d[child.tag].append(child_data)
            else:
                d[child.tag] = [d[child.tag], child_data]
        else:
            d[child.tag] = child_data
    return d

Perihalan kod:

  1. Mula-mula, kami menggunakan kaedah xml.etree.ElementTree modul fromstring untuk menukar XML aksara Tukar rentetan kepada objek Elemen. xml.etree.ElementTree模块的fromstring方法将XML字符串转换为Element对象。
  2. 然后,我们定义了一个xml_to_json函数,该函数接受一个XML字符串作为参数,并将解析后的结果转换为JSON字符串。
  3. xml_to_json函数中,我们首先获取根元素的tag,并将其作为最外层的键。
  4. 然后,我们调用xml_to_dict函数来递归地将每个XML元素转换为字典格式。
  5. xml_to_dict函数中,我们首先判断当前元素是否有属性,如果有,则将其转换为字典的@attributes键。
  6. 然后,我们判断当前元素是否有文本内容,如果有,则将其转换为字典的键值对。
  7. 最后,我们迭代当前元素的子元素,并递归调用xml_to_dict函数来解析子元素。

二、JSON转XML
与XML转JSON相反,我们可以使用xml.etree.ElementTree模块来生成XML,而使用json模块来解析和生成JSON。下面是一个将JSON转换为XML的示例:

import xml.etree.ElementTree as ET
import json

def json_to_xml(json_string):
    data = json.loads(json_string)
    root = ET.Element(data.keys()[0])
    convert_dict_to_xml(data[data.keys()[0]], root)
    return ET.tostring(root, encoding="utf-8", xml_declaration=True)

def convert_dict_to_xml(data, parent):
    if isinstance(data, dict):
        for key, value in data.items():
            if isinstance(value, dict):
                element = ET.SubElement(parent, key)
                convert_dict_to_xml(value, element)
            elif isinstance(value, list):
                for item in value:
                    element = ET.SubElement(parent, key)
                    convert_dict_to_xml(item, element)
            else:
                ET.SubElement(parent, key).text = str(value)
    else:
        parent.text = str(data)

代码说明:

  1. 首先,我们使用json模块的loads方法将JSON字符串解析为Python字典对象。
  2. 然后,我们创建一个根元素,将其tag设置为字典的键。
  3. 接下来,我们调用convert_dict_to_xml函数来递归地将字典转换为XML格式。
  4. convert_dict_to_xml函数中,我们首先判断当前数据是否为字典类型,如果是,则迭代字典的键值对。
  5. 如果值是字典类型,则创建一个子元素,并递归调用convert_dict_to_xml函数。
  6. 如果值是列表类型,则迭代列表中的每个元素,创建多个相同tag的子元素,并递归调用convert_dict_to_xml
  7. Kemudian, kami mentakrifkan fungsi xml_to_json, yang menerima rentetan XML sebagai parameter dan menukar hasil yang dihuraikan menjadi rentetan JSON.
  8. Dalam fungsi xml_to_json, kita mula-mula mendapatkan teg unsur akar dan menggunakannya sebagai kunci paling luar.

Kemudian, kami memanggil fungsi xml_to_dict untuk menukar secara rekursif setiap elemen XML kepada format kamus.

Dalam fungsi xml_to_dict, kami mula-mula menentukan sama ada elemen semasa mempunyai atribut dan jika ya, tukarkannya kepada kekunci @attributes kamus. 🎜🎜Kemudian, kami menentukan sama ada elemen semasa mempunyai kandungan teks dan jika ya, tukarkannya menjadi pasangan nilai kunci kamus. 🎜🎜Akhir sekali, kami mengulangi elemen anak unsur semasa dan secara rekursif memanggil fungsi xml_to_dict untuk menghuraikan elemen anak. 🎜🎜🎜2. JSON ke XML🎜Bertentangan dengan XML dengan JSON, kita boleh menggunakan modul xml.etree.ElementTree untuk menjana XML dan modul json untuk menghuraikan dan menjana JSON. Berikut ialah contoh menukar JSON kepada XML: 🎜rrreee🎜Perihalan kod: 🎜🎜🎜Mula-mula, kami menggunakan kaedah loads modul json untuk menghuraikan rentetan JSON ke dalam objek kamus Python. 🎜🎜Kemudian, kami mencipta elemen akar dan menetapkan tagnya sebagai kunci kamus. 🎜🎜Seterusnya, kami memanggil fungsi convert_dict_to_xml untuk menukar kamus kepada format XML secara rekursif. 🎜🎜Dalam fungsi convert_dict_to_xml, kami mula-mula menentukan sama ada data semasa ialah jenis kamus dan jika ya, ulangi pasangan nilai kunci kamus. 🎜🎜Jika nilainya ialah jenis kamus, buat elemen anak dan panggil fungsi convert_dict_to_xml secara rekursif. 🎜🎜Jika nilai ialah jenis senarai, ulangi setiap elemen dalam senarai, buat berbilang sub-elemen dengan teg yang sama dan panggil fungsi convert_dict_to_xml secara rekursif. 🎜🎜Jika nilai adalah jenis data asas yang lain, tambahkannya sebagai kandungan teks pada elemen semasa. 🎜🎜🎜Ringkasan: 🎜Melalui contoh kod di atas, kita boleh mencapai penukaran bersama antara XML dan JSON dalam Python. Sama ada ia menukar daripada XML kepada JSON atau daripada JSON kepada XML, ia boleh dicapai menggunakan perpustakaan dan kaedah yang berkaitan. Melalui penukaran ini, kami boleh menukar dan memproses data dengan mudah antara format data yang berbeza. Dalam pembangunan sebenar, kaedah yang sesuai dipilih untuk menghuraikan dan menjana format data yang berbeza mengikut keperluan khusus. 🎜

Atas ialah kandungan terperinci Python melaksanakan penukaran antara XML dan JSON. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn