Maison  >  Article  >  développement back-end  >  Python implémente la conversion entre XML et JSON

Python implémente la conversion entre XML et JSON

WBOY
WBOYoriginal
2023-08-07 19:10:494435parcourir

Python implémente la conversion entre XML et JSON

Python implémente la conversion entre XML et JSON

Introduction :
Dans le processus de développement quotidien, nous devons souvent convertir des données entre différents formats. XML et JSON sont des formats d'échange de données courants. En Python, nous pouvons utiliser diverses bibliothèques pour convertir entre XML et JSON. Cet article présentera plusieurs méthodes couramment utilisées, avec des exemples de code.

1. XML vers JSON
En Python, nous pouvons utiliser le module xml.etree.ElementTree pour analyser et générer du XML. Utilisez plutôt le module json pour analyser et générer du JSON. Voici un exemple de conversion de XML en 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

Description du code :

  1. Tout d'abord, nous utilisons la méthode fromstring du module xml.etree.ElementTree pour convertir le XML. caractères Convertir la chaîne en objet Element. 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. Ensuite, nous définissons une fonction xml_to_json, qui accepte une chaîne XML comme paramètre et convertit le résultat analysé en chaîne JSON.
  8. Dans la fonction xml_to_json, nous récupérons d'abord la balise de l'élément racine et l'utilisons comme clé la plus externe.

Ensuite, nous appelons la fonction xml_to_dict pour convertir récursivement chaque élément XML au format dictionnaire.

Dans la fonction xml_to_dict, nous déterminons d'abord si l'élément actuel a des attributs, et si c'est le cas, le convertissons en clé @attributes du dictionnaire. 🎜🎜Ensuite, nous déterminons si l'élément actuel a un contenu textuel et, si tel est le cas, le convertissons en paire clé-valeur d'un dictionnaire. 🎜🎜Enfin, nous parcourons les éléments enfants de l'élément actuel et appelons récursivement la fonction xml_to_dict pour analyser les éléments enfants. 🎜🎜🎜2. JSON vers XML🎜Contrairement à XML vers JSON, nous pouvons utiliser le module xml.etree.ElementTree pour générer du XML et le module json pour analyser et générer du JSON. Voici un exemple de conversion de JSON en XML : 🎜rrreee🎜Description du code : 🎜🎜🎜Tout d'abord, nous utilisons la méthode loads du module json pour analyser la chaîne JSON dans un objet dictionnaire Python. 🎜🎜Ensuite, nous créons un élément racine et définissons sa balise comme clé du dictionnaire. 🎜🎜Ensuite, nous appelons la fonction convert_dict_to_xml pour convertir récursivement le dictionnaire au format XML. 🎜🎜Dans la fonction convert_dict_to_xml, nous déterminons d'abord si les données actuelles sont un type de dictionnaire, et si c'est le cas, itérons les paires clé-valeur du dictionnaire. 🎜🎜Si la valeur est de type dictionnaire, créez un élément enfant et appelez la fonction convert_dict_to_xml de manière récursive. 🎜🎜Si la valeur est de type liste, parcourez chaque élément de la liste, créez plusieurs sous-éléments avec la même balise et appelez la fonction convert_dict_to_xml de manière récursive. 🎜🎜Si la valeur est un autre type de données de base, ajoutez-la en tant que contenu texte à l'élément actuel. 🎜🎜🎜Résumé : 🎜Grâce aux exemples de code ci-dessus, nous pouvons réaliser une conversion mutuelle entre XML et JSON en Python. Qu'il s'agisse de conversion de XML en JSON ou de JSON en XML, cela peut être réalisé en utilisant des bibliothèques et des méthodes pertinentes. Grâce à ces conversions, nous pouvons facilement échanger et traiter des données entre différents formats de données. Dans le développement réel, des méthodes appropriées sont sélectionnées pour analyser et générer différents formats de données en fonction de besoins spécifiques. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn