开发者代码

促销活动、技术干货、问题解答、技术讨论,学习,成长,分享,共建

pythonxml转json

2023-11-11 08:28:10 点击:106
pythonxml转json
Python中有多种方法可以将XML转换为JSON,包括使用标准库中的xml.dom.minidom模块、xmltodict模块以及lxml库。


1. 使用xml.dom.minidom模块: xml.dom.minidom是Python标准库中提供的一个轻量级的DOM操作接口。下面是将XML转换为JSON的示例代码:


```python import xml.dom.minidom import json


def xml_to_json(xml_str): # 解析XML字符串 dom = xml.dom.minidom.parseString(xml_str) # 获取根元素 root = dom.documentElement # 转换为JSON格式 json_data = xml_to_json_node(root) return json_data


def xml_to_json_node(node): # 判断当前节点类型 if node.nodeType == node.TEXT_NODE: # Text节点,返回节点内容 return node.nodeValue elif node.nodeType == node.ELEMENT_NODE: # Element节点 json_data = {} # 转换子节点 for child in node.childNodes: child_name = child.nodeName child_value = xml_to_json_node(child) # 判断是否已存在相同名字的子节点 if child_name in json_data: if type(json_data[child_name]) is list: json_data[child_name].append(child_value) else: json_data[child_name] = [json_data[child_name], child_value] else: json_data[child_name] = child_value return json_data


# 测试代码 xml = ''' Apple 10 Banana 5 ''' json_data = xml_to_json(xml) print(json.dumps(json_data, indent=4)) ```


运行以上代码,将输出以下JSON内容:


```json { "root": { "item": [ { "name": "Apple", "price": "10" }, { "name": "Banana", "price": "5" } ] } } ```


2. 使用xmltodict模块: xmltodict是一个专门用于转换XML到JSON的Python库。下面是用xmltodict实现XML转换为JSON的示例代码:


```python import xmltodict import json


def xml_to_json(xml_str): # 将XML字符串转换为字典 xml_dict = xmltodict.parse(xml_str) # 将字典转换为JSON json_data = json.dumps(xml_dict, indent=4) return json_data


# 测试代码 xml = ''' Apple 10 Banana 5 ''' json_data = xml_to_json(xml) print(json_data) ```


运行以上代码,将输出以下JSON内容:


```json { "root": { "item": [ { "name": "Apple", "price": "10" }, { "name": "Banana", "price": "5" } ] } } ```


3. 使用lxml库: lxml是Python中一个功能强大的XML处理库。下面是用lxml实现XML转换为JSON的示例代码:


```python import xml.etree.ElementTree as ET import json


def xml_to_json(xml_str): # 解析XML字符串 root = ET.fromstring(xml_str) # 转换为JSON格式 json_data = xml_to_json_node(root) return json_data


def xml_to_json_node(node): # 判断当前节点类型 if len(node) == 0: # 叶子节点,返回节点值 return node.text else: # 非叶子节点 json_data = {} for child in node: # 递归转换子节点 child_name = child.tag child_value = xml_to_json_node(child) # 判断是否已存在相同名字的子节点 if child_name in json_data: if type(json_data[child_name]) is list: json_data[child_name].append(child_value) else: json_data[child_name] = [json_data[child_name], child_value] else: json_data[child_name] = child_value return json_data


# 测试代码 xml = ''' Apple 10 Banana 5 ''' json_data = xml_to_json(xml) print(json.dumps(json_data, indent=4)) ```


运行以上代码,将输出以下JSON内容:


```json { "root": { "item": [ { "name": "Apple", "price": "10" }, { "name": "Banana", "price": "5" } ] } } ```


以上是三种常用的将XML转换为JSON的方法,根据实际情况选择适合自己的方法进行使用。
声明:免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:dm@cn86.cn进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。本站原创内容未经允许不得转载。
  • 7x24

    在线售后支持

  • 10

    +

    10年互联网服务经验

  • 300

    +

    全国300余家服务机构

  • 70000

    +

    与70000余家企业客户携手

logo
祥云平台主营业务:品牌型网站建设,高端型网站建设, 外贸型网站建设,营销型网站建设,网站优化, 开发类网站,企业网络营销,搜索引擎推广,微信小程序, 企业邮箱,短视频运营等。

服务热线

400-007-8608

公司:

苏州祥云平台信息技术有限公司
苏州华企立方信息技术有限公司

地址:江苏省昆山市昆太路530号祥和国际大厦15-16层

返回顶部