Python XML 转 JSON,XML 转字典

今天我们将学习如何在 Python 中将 XML 转换为 JSON 和 XML 转换为字典。我们可以使用 Python 的 xmltodict 模块来读取 XML 文件并将其转换为字典或 JSON 数据。我们还可以在大型 XML 文件上进行流式处理,并将其转换为字典。在进入编码部分之前,让我们首先了解为什么需要进行 XML 转换。

将 XML 转换为字典/JSON

XML 文件已经逐渐过时,但在网络上仍然有许多大型系统在使用这种格式。XML 比 JSON 更重,因此大多数开发人员更喜欢在其应用程序中使用后者。当应用程序需要理解任何来源提供的 XML 时,将其转换为 JSON 可能是一项繁琐的任务。Python 中的 xmltodict 模块使这项任务变得非常简单和直观。

开始使用 xmltodict

我们可以开始使用 xmltodict 模块,但首先需要安装它。我们将主要使用 pip 来进行安装。

安装 xmltodict 模块

以下是我们如何使用 Python 包索引(pip)安装 xmltodict 模块:

pip install xmltodict

由于 xmltodict 是一个非常轻量级的模块,因此安装速度会很快。这是此安装的输出:!python install xmltodict module 最好的一点是,该模块不依赖于任何其他外部模块,因此它是轻量级的,并且避免了任何版本冲突。仅供演示,在基于 Debian 的系统上,可以使用 apt 工具轻松安装此模块:

sudo apt install python-xmltodict

另一个优点是该模块有一个官方的 Debian 软件包。

Python XML 转换为 JSON

尝试此模块的最佳方法是执行其最初设计的操作之一,即执行 XML 到 JSON 的转换。让我们看一下如何完成此操作的代码片段:

import xmltodict
import pprint
import jsonmy_xml = """<audience><id what="attribute">123</id><name>Shubham</name></audience>
"""pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(xmltodict.parse(my_xml)))

让我们看一下此程序的输出:!python xml to json 在这里,我们只需使用 parse(...) 函数将 XML 数据转换为 JSON,然后我们使用 json 模块以更好的格式打印 JSON。

将 XML 文件转换为 JSON

将 XML 数据直接放在代码中既不总是可能的,也不现实。通常,我们将数据保存在数据库或某些文件中。我们也可以直接选择文件并将其转换为 JSON。让我们看一下如何使用 XML 文件执行转换的代码片段:

import xmltodict
import pprint
import jsonwith open('person.xml') as fd:doc = xmltodict.parse(fd.read())pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(doc))

让我们看一下此程序的输出:!python xml file to json 在这里,我们使用另一个模块 pprint 以格式化的方式打印输出。除此之外,使用 open(...) 函数非常直观,我们使用它来获取文件描述符,然后将文件解析为 JSON 对象。

Python XML 转换为字典

正如模块名称本身所暗示的那样,xmltodict 实际上将我们提供的 XML 数据转换为一个简单的 Python 字典。因此,我们也可以简单地使用字典键访问数据。以下是一个示例程序:

import xmltodict
import pprint
import jsonmy_xml = """<audience><id what="attribute">123</id><name>Shubham</name></audience>
"""
my_dict = xmltodict.parse(my_xml)
print(my_dict['audience']['id'])
print(my_dict['audience']['id']['@what'])

让我们看一下此程序的输出:!python xml to dict 因此,标签可以作为键使用,同时属性键也可以使用 @ 符号作为前缀。

支持 XML 中的命名空间

在 XML 数据中,通常有一组命名空间,用于定义 XML 文件提供的数据范围。在转换为 JSON 格式时,有必要让这些命名空间在 JSON 格式中保持不变。让我们考虑这个示例 XML 文件:

<root xmlns="https://defaultns.com/"xmlns:a="https://a.com/"><audience><id what="attribute">123</id><name>Shubham</name></audience>
</root>

以下是一个示例程序,演示了如何在 JSON 格式中包含 XML 命名空间:

import xmltodict
import pprint
import jsonwith open('person.xml') as fd:doc = xmltodict.parse(fd.read(), process_namespaces=True)pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(doc))

让我们看一下此程序的输出:!xml namespace to dict and json

JSON 转 XML 转换

尽管将 XML 转换为 JSON 是该模块的主要目标,但 xmltodict 也支持执行相反的操作,将 JSON 转换为 XML 格式。我们将在程序中提供 JSON 数据。以下是一个示例程序:

import xmltodictstudent = {"data" : {"name" : "Shubham","marks" : {"math" : 92,"english" : 99},"id" : "s387hs3"}
}print(xmltodict.unparse(student, pretty=True))

让我们看看这个程序的输出:!python json to xml 请注意,为了使其正常工作,必须提供单个 JSON 键。如果我们考虑修改我们的程序,使其在数据的第一级包含多个 JSON 键,如下所示:

import xmltodictstudent = {"name" : "Shubham","marks" : {"math" : 92,"english" : 99},"id" : "s387hs3"
}print(xmltodict.unparse(student, pretty=True))

在这种情况下,我们在根级别有三个键。如果我们尝试对这种形式的 JSON 进行解析,将会遇到以下错误:!python json to xml unparse error。这是因为 xmltodict 需要使用第一个键构造 XML,作为根 XML 标签。这意味着在数据的根级别只能有一个 JSON 键。

结论

在本课程中,我们学习了一个出色的 Python 模块,可用于解析和转换 XML 为 JSON,反之亦然。我们还学习了如何使用 xmltodict 模块将 XML 转换为字典。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[N-139]基于springboot,vue宠物领养系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vue3element-plus 服务端技术&#xff1a;springbootmybatis-plusr…

Vue-easy-tree封装及使用

1.使用及安装 下载依赖 npm install wchbrad/vue-easy-tree引入俩种方案 1.在main.js中引入 import VueEasyTree from "wchbrad/vue-easy-tree"; import "wchbrad/vue-easy-tree/src/assets/index.scss" Vue.use(VueEasyTree)2.当前页面引入 import VueEa…

构建企业私域流量池:新时代的客户管理策略

随着互联网的发展和数字化时代的来临&#xff0c;企业面临的竞争环境日趋激烈。为了在众多竞争者中脱颖而出&#xff0c;许多企业开始转向私域流量的建设。私域流量是企业通过自有渠道获取的、可以自由支配的流量&#xff0c;对于提升品牌忠诚度、促进销售增长具有重要意义。本…

PAT-Apat甲级题1007(python和c++实现)

PTA | 1007 Maximum Subsequence Sum 1007 Maximum Subsequence Sum 作者 CHEN, Yue 单位 浙江大学 Given a sequence of K integers { N1​, N2​, ..., NK​ }. A continuous subsequence is defined to be { Ni​, Ni1​, ..., Nj​ } where 1≤i≤j≤K. The Maximum Su…

在建站和小程序方面,公司如何提升客户的体验

在建站和小程序方面&#xff0c;公司可以通过以下几个方面来提升客户的体验&#xff1a; 了解客户需求&#xff1a;在项目开始之初&#xff0c;深入了解客户的业务需求、目标受众、品牌风格等&#xff0c;是至关重要的。通过与客户的深入沟通&#xff0c;可以更好地把握其需求…

2024年第三届能源与环境工程国际会议(CFEEE 2024) | Ei&Scopus双检索

会议简介 Brief Introduction 2024年第三届能源与环境工程国际会议(CFEEE 2024) 会议时间&#xff1a;2024年12月12日-14日 召开地点&#xff1a;澳大利亚凯恩斯 大会官网&#xff1a;CFEEE 2024-2024 International Conference on Frontiers of Energy and Environment Engine…

day42_jdbc

今日内容 0 复习昨日 1 JDBC概述 2 JDBC开发步骤 3 完成增删改操作 4 ResultSet 5 登录案例 0 复习昨日 1 写出JQuery,通过获得id获得dom,并给input输入框赋值的语句 $(“#id”).val(“值”) 2 mysql内连接和外连接的区别 内连接只会保留完全符合关联条件的数据 外连接会保留表…

如何在linux下使用openssl自签https的ip证书配置nginx

《如何在linux下使用openssl自签https的ip证书配置nginx》首发牧马人博客转发请加此提示 如何在linux下使用openssl自签https的ip证书配置nginx 背景 **<<如何在linux下使用openssl自签https的ip证书配置nginx>>**这篇文章的诞生跟上篇&#xfeff;&#xfeff;浅…

antv/x6节点添加鼠标悬浮高亮和删除功能

antv/x6节点添加鼠标悬浮高亮和删除功能 效果鼠标悬浮高亮鼠标移出恢复原状态 效果 鼠标悬浮高亮 this.graph.on(node:mouseenter, ({ node }) > {node.addTools({name: button-remove,args: {x: 100%,y: 0,offset: { x: 0, y: 0 },},})})鼠标移出恢复原状态 this.graph.on(…

Java/Python/Go不同开发语言基础数据结构和相关操作总结-数组篇

Java/Python/Go不同开发语言基础数据结构和相关操作总结 1. Java1.1 静态数组Object[]1.1.1 数据结构和定义方式1.1.2 增加1.1.3 修改1.1.4 查询1.1.5 删除1.1.6 获取元素的位置1.1.7 获取总长度1.1.8 正向排序1.1.9 逆向排序 1.2 动态列表List\<Object>1.2.1 数据结构和…

如何实现冻干机和产品全生命周期的验证和监测?

为什么冻干需要工艺优化和合规性 冻干是制药和生物技术产品的关键工艺&#xff0c;需要精确控制关键的温度和压力参数。通过遵守 GMP 和 FDA 合规性等监管准则&#xff0c;您可以生产出更高质量的产品&#xff0c;避免不必要的浪费&#xff0c;并缩短产品上市时间。 要想在冻干…

Java on Azure Tooling 2024年1月更新|Azure Key Vault 支持、示例项目创建支持及更多

作者&#xff1a;Jialuo Gan - Program Manager, Developer Division At Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎来到 2024 年 Java on Azure 工具的首次更新。在本次更新中&#xff0c;我们将介绍对于 Azure Key Vault 支持、基于 Azure 示例项目的创建支…

Python入门指北二十六

Python中如何实现静态类型检查和动态类型检查&#xff1f;你有哪些工具推荐&#xff1f; Python中有许多常用的Web开发框架&#xff0c;每个框架都有其独特的特点和适用场景。以下是一些常用的Web开发框架及其特点&#xff1a; Django&#xff1a; 特点&#xff1a;Django是一…

更换服务器是否需要更换SSL证书?

在互联网时代&#xff0c;随着企业和网站的发展&#xff0c;更换服务器是一种常见的需求。然而&#xff0c;许多网站管理员在更换服务器时是否需要更换SSL证书存在疑虑。本文将就此问题进行探讨&#xff0c;帮助您了解在更换服务器时是否需要更换SSL证书。 1、SSL证书的绑定 SS…

【面试】冲刺春招!每天三十道面试题——Java基础篇(一)

目录 一 JDK 和 JRE 的区分 二 简述编码的作用以及记事本的实现原理 三 基本类型有哪些&#xff1f;分别占据多少空间&#xff1f; 四 java中布尔类型的空间大小是怎么定下来的&#xff1f;为什么不是1bit&#xff0c; 把考虑因素说一下 五 int类型和float类型哪一个精度更…

nohost本地部署

1、安装node Node.js 官方网站下载&#xff1a;https://nodejs.org/en/download/ 2、安装whistle 安装命令为 npm install -g whistle 或 npm install -g cnpm --registryhttps://registry.npm.taobao.org 后&#xff0c;使用 cnpm install -g whistle 来安装 3、插件修改 官方…

线性矩阵不等式LMI与李雅普诺夫Lyapunov稳定性

文章目录 线性矩阵不等式&#xff08;Linear Matrix Inequality&#xff0c;LMI&#xff09;例子 Lyapunov稳定性Schur Complement定义Schur Complement作用/性质利用Schur Complement将LMI和Lyapunov联系起来 线性矩阵不等式&#xff08;Linear Matrix Inequality&#xff0c;…

BUG:docker启动之后直接退出问题

示例如下&#xff1a; 问题排查&#xff1a; 启动命令 sudo docker run --privilegedtrue --runtimenvidia --shm-size80g -v /mmm_data_center:/mmm_data_center -v /imagecenter_new/:/imagecenter_new -v /data1:/data1 -v /mnt/offline_data/:/mnt/offline_data/ --neth…

cesium-测量高度垂直距离

cesium做垂直测量 完整代码 <template><div id"cesiumContainer" style"height: 100vh;"></div><div id"toolbar" style"position: fixed;top:20px;left:220px;"><el-breadcrumb><el-breadcrumb-i…

【51单片机】直流电机实验和步进电机实验

目录 直流电机实验直流电机介绍ULN2003 芯片介绍硬件设计软件设计实验现象 步进电机实验步进电机简介步进电机的工作原理步进电机极性区分双极性步进电机驱动原理单极性步进电机驱动原理细分驱动原理 28BYJ-48 步进电机简介软件设计 橙色 直流电机实验 在未学习 PWM 之前&…