JSON和XML:不可同日而语

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

很多人都在心里纠结,如果 JSON 和 XML 相比,谁更好谁更快?在接下来的新项目中到底选择哪一个?别傻了!完全没有可比性。就像自行车和 AMG S65 ,你能说哪个更好吗?虽然两者都是交通工具,但有些情况下,自行车反而更便捷。所以 JSON 和 XML 也一样,它们都各有所长,完全没有必要进行比较。

下面举一个简单的 JSON 数据(140个字符):

{
  "id": 123,
  "title": "Object Thinking",
  "author": "David West",
  "published": {
    "by": "Microsoft Press",
    "year": 2004
  }
}

同样的数据在 XML 中会表示如下(167个字符):

<?xml version="1.0"?>
<book id="123">
  <title>Object Thinking</title>
  <author>David West</author>
  <published>
    <by>Microsoft Press</by>
    <year>2004</year>
  </published>
</book>

很容易看出其中的区别,前者更简洁更容易理解,而且能在JavaScript 中能完美解析。所以,我们便可以简单粗暴地放弃 XML 选择 JSON 了吗?谁还会需要已历时15年的重量级语言呢?

但恰恰相反,本人就非常喜爱 XML ,且听下文分解。

但千万别误会,本文并不是在反对 JSON 。 JSON 的确是很好的数据格式,但它仅仅只是一种数据格式,经常被临时用于将数据从 A 点传到 B 点。它比 XML 更简短易读,但仅此而已。

XML 是一种非常强大的语言,而非只是单纯的数据格式。相对于 JSON 和其他简单的数据格式来说,如 YAML ,XML 至少有以下四个重要特性。

  • XPath

为了从文档中得到上文类似的出版年份,只需要发送一个简单的 XPath 请求:/book/published/year/text() 。但是,必须得有一个 XPath 处理器来解析请求并返回2004。好就好在 XPath2.0是集 functions、predicates、axes 等为一体的强大检索引擎,在不用 Java 代码编写任何遍历的逻辑的情况下,就可以在 XPath 请求中以自然语言形式加入任何逻辑,例如,你可以直接发出请求 “How many books were published by David West in 2004?” ,便能通过 XPath 得到答案。而这是 JSON 所不能做到的。

  • Attributes and Namespaces

可以将 metadata 加到 XML 数据中,正如上面的 id 属性一样。数据保存在元素中,例如图书作者的姓名,而 metadata(数据的数据)应该保存为属性,这会大大有利于组织和结构化信息。最重要的是,元素和属性都可以标记为属于某个 namespaces ,当多个应用使用同一 XML 文档时,这种技术的优势会非常明显。

  • XML Schema

试想这样的情况,当你在一台机器上创建了 XML 文档,在其他电脑上做了数次修改,然后又传到别的电脑上使用,所以必须确保文档结构没有被中间操作所破坏。比如可能有人用 <year> 保存出版日期,但别人又可能使用 ISO-8601 格式的 <date> 。为了避免这样的结构混乱,我们可以创建一个说明文档 XML Schema ,和主文档一起进行保存。在每次操作主文档之前,都需要通过 schema 文件检查其正确性,这是生产过程中的一种集成测试。 RelaxNG 也是类似的机制,但会简单很多,如果觉得 XML Schema 太过复杂不妨尝试用 RelaxNG。

  • XSL

事实上,可以不用任何 Java/Ruby 等代码就能完成 XML 文档的修改。简单的说,你只需要创建一个 XSL transformation 文档并将其应用于原始 XML ,然后得到一个新的 XML 。 XSL 语言(纯功能性语言)是专为分层数据操作设计的,它比 Java 或任何其他面向对象/过程的语言都更适合这一任务。借助 XSL 可以将 XML 转换为任何形式,包括纯文本和 HTML 。很多人抱怨 XSL 太复杂,但其实没那么难, XSL 的核心功能其实很简单,大家不妨一试。

以上所述并不是 XML 的全部特征,但这四大特性的确用途非凡。它们不仅可以让文档的“自给自足”,还能进行自我验证(XML Schema),进而知道如何修改(XSL),最后还能方便地获得其中的文档内容(Xpath)。

同时,市面上还有很多以 XML 为基础发展的语言、标准和应用,包括 Xforms、 SVG、 MathML、 RDF、 OWL、 WSDL 等。但一般的主流项目中都不会用到,因为它们的针对性都太强。

设计 JSON 的用途并非是满足以上特性,尽管 JSON 领域现在努力尝试,包括用于查询的 JSONPath 、一些转换工具和用于验证的 json-schema ,但和强大的 XML 相比这只是微不足道的模仿,笔者并不认为会有长远发展,而且迟早会消失殆尽。

综上所述, JSON 是一种没有过多附加功能的简单数据格式,其最佳的使用情况是在 AJAX 下,除此之外,本人都强烈推荐大家使用 XML。

(编译自:https://dzone.com/articles/stop-comparing-json-and-xml)

OneAPM 为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客。

js实现json和xml之互转 在web工程里面,可能需要经常使用到xml和web的互转功能, 在这里,使用万恶的百度之后,发现用java实现效率和效果很差,json转成xml会出现一些类的头,比如,这类的,找了很多方法都没有能够消除 鉴于js对json的良好支持,所以我们在前端使用js进行转化,发送到conroller 在这里,简单说下找到这个方法的“心路历程”,真是累,不过解决完以后还是很开心的 1. 阅读详情

相关推荐

java xml 转json json 转 json对象

如果你的XML数据对应着特定的Java类,你也可以先解析XML到Java对象,然后再将对象转换为JSON。这种方法的好处是灵活,特别是当你处理的是结构未知或复杂的XML数据时。在Java中,将JSON字符串转换为JSON对象通常意味着将字符串解析为一个可以在程序中操作的数据结构,比如。(或直接转换为你的Java对象,如果你定义了相应的类的话),然后再将其转换为JSON字符串。首先,你需要在你的项目中引入Jackson的XML和核心库。到JSON的转换不是直接支持的,你需要先解析XML到对象或。

道友 2808

转给你的老板,如何给程序员更少的薪水?

最近,玩推刷到Yegor Bugayenko大佬的这篇文章,感觉总结的这14条,我相信你所呆的公司,总会多多少少符合其中的几条,因此推给大家一下,这篇文章竟然17年就有国人翻译了放在优快云上,近来我才刷到。 我看了一下他博客下的评论,一位小哥的评论,说与其说是写给老板的,不如说借此文来打击那些不良雇主。 也有小哥说,要马上把该文发给公司的CTO&CFO。 说实话,这篇文章总结的不错,值得...

weixin_43893935的博客 235

FreeRTOS --(15)信号量之概述

FreeRTOS 中使用信号量来做同步,信号量可以在任务中使用作为任务与任务间的同步,也可以在中断中使用(带 FromISR 的版本)中断与任务间的同步; 针对不同的应用场景,信号量分为两种: 1、二值信号量; 2、计数信号量; 1、二值信号量 1.1、Usage 顾名思义,二值信号量只有两个值:0 和 1;它用于简单场景下的任务与任务、中断与任务之间的同步,比如:一个任务,在等待某个资源到位后,才能够继续执行,在得到这个资源之前,它处于阻塞状态,假如一个中断来了,给出了这个资源,那么.

StephenZhou 6517

为什么我再也不想和 Google HR 交谈了

  英文:yegor256,编译:伯乐在线/心灵是一棵开花的树    http://blog.jobbole.com/110340/    【伯乐在线导读】:    关于程序员面试时现场写代码,估计大家还记得 2015 年 6 月的一个新闻,知名包管理工具 Homebrew 的作者 Max Howell 去 Google 面试。因为他没能写出反转二叉树算法,最后被 Google 拒绝了。后来 9 ...

weixin_34112030的博客 165

51单片机矩阵键盘——LCD1602显示

矩阵键盘扫描(输入扫描) 原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态。

YLG_lin的博客 9853

ADS RFpro 射频阻抗仿真步骤

导入器件后,在库里面选取器件的对应模型,如图所示我们选取10pf 系统自带的村田模型。选取网络上的器件,拖入到下面component Models。导入成功后,截取需要仿真的区域(不截取仿真时间会非常长),可以生成对应如下原理图,通过原理图继续调整仿真。图上找到需要仿真链路上的网络,右键设置为信号。的叠层信息,按照PCB板厂提供信息填写完整。选择仿真的频率范围和频点数,生成如下图的RFPro仿真界。,然后再把GND也添加到下面。按图设置截取需要仿真的部分。添加成功后 网络就有了,15 双击run开始仿真。

m0_72954480的博客 3217

如何用Google APIs和Google的应用系统进行集成(5)----如何把Google Tasks的JSON Schema转换成XML的Schema(XSD)?...

前面说了一些Google API的介绍,但是在实际的开发当中,我们可能需要把Google RESTful API返回的JSON数据转换成XML数据输入到第三方系统,这在企业应用集成里面非常的常见。那么里面就有一个问题,如何确保转换后的XML数据格式是规范的,这就需要XML Schema(XML)来进行校验。现在关键是,我们只知道Google API的JSON的schema,但是Google RES...

各研发管理 261

管道机器人手臂机械结构设计cad【8张】+三维图+设计说明书+绛重

履带式管道机器人适用于各种管道环境,包括直管道、弯曲管道、水平管道、垂直管道等,其灵活性和适应性使得它可以应对不同形状和尺寸的管道,完成全面的检测和维护工作。管道机器人研究具有重要的现实意义和深远的社会影响,通过提高工作效率、降低人员风险、提升服务质量、节约成本资源和促进科技创新等方面的作用,为现代工程技术领域的发展和进步做出了积极的贡献。管道机器人是一种能够在管道内部执行各种任务的智能机器人,而管道机器人的机械臂对于管道机器人在管道内执行任务的灵活性、稳定性和效率至关重要。

kejigongjiang的博客 943

如何用Google APIs和Google的应用系统进行集成(8)----如何把Google Blogger(博客)的JSON Schema转换成XML的Schema(XSD)?

在Google RESTFul API中,Google Blogger API应该和我们的生活离得最近;因为几乎很多人每天都在看博客,都在写博客,都听说过博客。在前面的Google的应用系统进行集成(5)和Google的应用系统进行集成(6)的系列文章中,我们提到了如何把Google Calendar和Google Tasks的JSON Schema转换成XML的XSD的Schema;从博客的访问量来看,还是有很多志同道合的朋友们对这个比较感兴趣,因此,这个章节,我继续给大家奉献和分享一下如何把Google

超越梦想,一起飞!!! 2746

Diffusion Model原理详解

Diffusion Model(扩散模型 )对标的是生成对抗网络(GAN),本文将用通俗的语言和公式为大家介绍Diffusion Model,并且结合公式为大家梳理Diffusion Model的代码。

weixin_42620109的博客 6098

用运放和乘法器DIY忆阻模拟器:从理论到Multisim仿真实战

本文详细介绍了如何利用运放和乘法器DIY忆阻模拟器,从理论基础到Multisim仿真实战。通过解析忆阻器的数学模型,设计关键电路模块,并完成仿真验证,帮助电子爱好者低成本实现忆阻器功能。文章还提供了实际调试中的常见问题解决方案和进阶应用建议,适合神经形态计算和非易失性存储领域的研究者参考。

weixin_28718345的博客 417

Json和XML文件相互转化

本文介绍了在Java中实现XML与JSON相互转换的多种方法。对于XML转JSON,讲解了使用org.json库的步骤,包括读取XML文件、转换为JSONObject并格式化输出。对于JSON转XML,则演示了如何通过org.json、Jackson以及Gson+XStream三种方式实现转换。每种方法都提供了详细的Maven依赖配置和完整代码示例,并说明了关键代码的功能。文章还比较了不同转换库的特点:org.json简单易用,Jackson功能全面适合大数据处理,Gson+XStream则更轻量灵活。这些

持续更新中!!! 4074

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

Robot_PLC_HMI_Automation 1万+

数据格式:什么是JSON和XML

JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。-JSON基于JavaScript的一个子集,但JSON是独立于语言的文本格式,许多编程语言都支持JSON。-JSON格式的数据以键值对的形式存储,类似于编程语言中的字典或对象。-JSON格式的数据通常用于Web开发中的前后端数据交换,API响应等。"age": 28,-XML(eXtensible Markup Language,可扩展标记语言)是一种标记语言,用于描述数据的结构和语义。

oOBubbleX的博客 3669

【WRF数据介绍第一期】静态地理数据介绍及下载

WRF数据介绍第一期:静态地理数据介绍及下载

WW、forever的博客 4810

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

别再比较JSON和XML

JSON还是XML?哪一个比较好?哪一个更快?我下一个项目应该使用哪一个?这些东西没有可比性。说真的,就像比较自行车和出租车一样。他们都可以把你从家里带到办公室,对吧?在某些情况下,自行车会做得更好。但这是否意味着他们可以互相比较呢?这里同样适用于JSON和XML。它们与自己的适用范围是非常不同的.下面是一个简单的JSON数据块的样子(140个字符):{ "id": 123, "title...

xfeiman的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

json 和 xml 的区别

一、定义介绍 XML 定义 扩展标记语言(Extensible Markup Language,XML),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML 使用 DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。 XML 是标准通用标记语言(SGML)的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构

ChineseSoftware的博客 2347

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

XML和JSON

XML和JSON XML 参考博客:https://blog.youkuaiyun.com/gavin_john/article/details/51511180 xml(eXtensible Markup Language)可扩展标记语言,它具有平台无关性,是一门独立的标记语言。不论是Pyhton、Java还是C语言,都可以解析xml的数据或者生成xml,这一特性是xml可以作为程序之间通信介质的重要前提。 xml可以以多种形式保存,.xml文件只是其中的一种,我们还可以在内存中构建xml数据。 发展历史: 196

旭日东升的博客 2859

数据交换格式之XML和JSON

学习知识点XML和JSON一、什么是数据交换格式客户端与服务器常用数据交换格式xml、json、html二、数据交换格式应用场景移动端(安卓、IOS)通讯方式采用http协议+JSON格式走restful风格。很多互联网项目都采用Http协议+JSON因为xml比较重WebService服务采用http+xml格式银行项目使用比较多三、JSON简单使用 3.1、什么是JSON?JSON(JavaS...

coderWang 6475
上一篇: 使用Java构建微服务
下一篇: JSON和XML:不可同日而语
Viking_bird
博客等级 码龄11年 92粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值