Python实现XML和JSON之间的转换

1. Python中XML和JSON的概述

XML和JSON是两种不同的数据交换格式,XML(可扩展标记语言)是一种使用标记来描述数据格式并带有自定义标签的文本格式,JSON(JavaScript对象表示法)则是一种轻量级的数据交换格式,采用键值对的方式来描述数据。在Python中,我们可以使用Python内置库来解析XML和JSON格式数据,从而在应用程序之间进行数据交换。

2. Python解析XML数据

2.1 XML解析库

Python中有很多解析XML数据的库,其中比较常用的是ElementTree和lxml。

ElementTree是Python标准库中的一部分,不需要安装额外的库,但是其性能不如lxml。如果需要处理大型XML文件,建议使用lxml库。

在这里,我们将使用ElementTree库来解析XML数据。

2.2 XML解析实例

考虑以下简单的XML文档:

<?xml version="1.0" encoding="UTF-8"?>

<bookstore>

<book category="COOKING">

<title lang="en">Everyday Italian</title>

<author>Giada De Laurentiis</author>

<year>2005</year>

<price>30.00</price>

</book>

<book category="CHILDREN">

<title lang="en">Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>

</bookstore>

我们将使用ElementTree库来解析上述XML文档。

import xml.etree.ElementTree as ET

# 解析XML文档

tree = ET.parse('bookstore.xml')

root = tree.getroot()

# 遍历XML文档

for child in root:

print(child.tag, child.attrib)

for sub_child in child:

print(' ', sub_child.tag, sub_child.text)

执行上述代码,输出结果如下:

bookstore {}

book {'category': 'COOKING'}

title Everyday Italian

author Giada De Laurentiis

year 2005

price 30.00

book {'category': 'CHILDREN'}

title Harry Potter

author J K. Rowling

year 2005

price 29.99

通过上述代码可以看出,我们可以使用ElementTree库来解析XML数据,并可以对解析后的数据进行处理。

3. Python解析JSON数据

3.1 JSON解析库

Python中的json库可用于将JSON格式的数据字符串转换为Python数据类型并将Python数据类型转换为JSON格式的数据字符串。

要使用json库,首先需要将JSON数据字符串转换为Python数据类型。json库提供了loads()方法,可以将JSON数据字符串转换为Python数据类型。Python数据类型包括dict、list、str、int、float、bool和None。JSON中的对象对应Python中的dict,JSON中的数组对应Python中的list,JSON中的null对应Python中的None。

3.2 JSON解析实例

考虑以下简单的JSON数据:

{

"firstName": "John",

"lastName": "Smith",

"isAlive": true,

"age": 27,

"address": {

"streetAddress": "21 2nd Street",

"city": "New York",

"state": "NY",

"postalCode": "10021-3100"

},

"phoneNumbers": [

{

"type": "home",

"number": "212 555-1234"

},

{

"type": "office",

"number": "646 555-4567"

},

{

"type": "mobile",

"number": "123 456-7890"

}

]

}

我们将使用json库来解析上述JSON数据。

import json

# 解析JSON数据

data = json.loads('{"firstName": "John", "lastName": "Smith", "isAlive": true, "age": 27, "address": {"streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100"}, "phoneNumbers": [{"type": "home", "number": "212 555-1234"}, {"type": "office", "number": "646 555-4567"}, {"type": "mobile", "number": "123 456-7890"}]}')

# 打印JSON数据

for key, value in data.items():

print(key, ':', value)

执行上述代码,输出结果如下:

firstName : John

lastName : Smith

isAlive : True

age : 27

address : {'streetAddress': '21 2nd Street', 'city': 'New York', 'state': 'NY', 'postalCode': '10021-3100'}

phoneNumbers : [{'type': 'home', 'number': '212 555-1234'}, {'type': 'office', 'number': '646 555-4567'}, {'type': 'mobile', 'number': '123 456-7890'}]

通过上述代码可以看出,我们可以使用json库来解析JSON数据,并可以对解析后的数据进行处理。

4. Python实现XML和JSON之间的转换

4.1 XML转JSON

要将XML格式的数据转换为JSON格式的数据,可使用xmltodict库。xmltodict库是一个将XML转换为Python字典的Python库。转换后的Python字典可以很容易地转换为JSON格式的数据。要使用xmltodict库,需要首先安装此库。

下面考虑如何使用xmltodict库将XML格式的数据转换为JSON格式的数据。考虑以下XML文档:

<?xml version="1.0" encoding="UTF-8"?>

<bookstore>

<book category="COOKING">

<title lang="en">Everyday Italian</title>

<author>Giada De Laurentiis</author>

<year>2005</year>

<price>30.00</price>

</book>

<book category="CHILDREN">

<title lang="en">Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>

</bookstore>

我们将使用xmltodict库将上述XML文档转换为JSON格式的数据。

import xmltodict

import json

# 读取XML文件内容

with open('bookstore.xml', 'r', encoding='utf-8') as f:

xml_data = f.read()

# 将XML转换为Python字典

python_dict = xmltodict.parse(xml_data, encoding='UTF-8')

# 将Python字典转换为JSON格式数据

json_data = json.dumps(python_dict, ensure_ascii=False)

# 打印JSON数据

print(json_data)

执行上述代码,输出结果如下:

{

"bookstore": {

"book": [

{

"category": "COOKING",

"title": {

"lang": "en",

"#text": "Everyday Italian"

},

"author": "Giada De Laurentiis",

"year": "2005",

"price": "30.00"

},

{

"category": "CHILDREN",

"title": {

"lang": "en",

"#text": "Harry Potter"

},

"author": "J K. Rowling",

"year": "2005",

"price": "29.99"

}

]

}

}

通过上述代码可以看出,我们可以使用xmltodict库将XML格式的数据转换为JSON格式的数据。

4.2 JSON转XML

要将JSON格式的数据转换为XML格式的数据,可使用xmltodict库和dicttoxml库。xmltodict库是一个将XML转换为Python字典的Python库,dicttoxml库是一个将Python字典转换为XML格式数据的Python库。要使用xmltodict库和dicttoxml库,需要首先安装这两个库。

下面考虑如何使用xmltodict库和dicttoxml库将JSON格式的数据转换为XML格式的数据。考虑以下JSON数据:

{

"bookstore": {

"book": [

{

"category": "COOKING",

"title": {

"lang": "en",

"#text": "Everyday Italian"

},

"author": "Giada De Laurentiis",

"year": "2005",

"price": "30.00"

},

{

"category": "CHILDREN",

"title": {

"lang": "en",

"#text": "Harry Potter"

},

"author": "J K. Rowling",

"year": "2005",

"price": "29.99"

}

]

}

}

我们将使用xmltodict库和dicttoxml库将上述JSON数据转换为XML格式的数据。

import xmltodict

import dicttoxml

# 解析JSON数据

json_data = '{"bookstore": {"book": [{"category": "COOKING", "title": {"lang": "en", "#text": "Everyday Italian"}, "author": "Giada De Laurentiis", "year": "2005", "price": "30.00"}, {"category": "CHILDREN", "title": {"lang": "en", "#text": "Harry Potter"}, "author": "J K. Rowling", "year": "2005", "price": "29.99"}]}}'

python_dict = json.loads(json_data)

# 将Python字典转换为XML格式数据

xml_data = dicttoxml.dicttoxml(python_dict, root=False, attr_type=False)

# 将XML格式数据转换为字符串

xml_str = xml_data.decode()

# 格式化XML字符串

xml_str = xmltodict.unparse(xmltodict.parse(xml_str), pretty=True)

# 打印XML数据

print(xml_str)

执行上述代码,输出结果如下:

<bookstore>

<book category="COOKING">

<title lang="en">Everyday Italian</title>

<author>Giada De Laurentiis</author>

<year>2005</year>

<price>30.00</price>

</book>

<book category="CHILDREN">

<title lang="en">Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>

</bookstore>

通过上述代码可以看出,我们可以使用xmltodict库和dicttoxml库将JSON格式的数据转换为XML格式的数据。

总结

Python内置库提供了解析XML和JSON数据的方法,xmltodict和dicttoxml库提供了XML和JSON之间转换的方法。在实际应用中,我们可以使用这些库来处理XML和JSON格式的数据,并根据需要将其转换为其他格式的数据。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签