Delphi 中 JSON 与 XML 解析速度

2024-02-03

我们正在创建一个使用大量 XML 解析的应用程序,我想也许可以使用 JSON,因为我们可以使用 JSON 作为 XML 的替代品。

我需要测试 JSON 或 XML 哪个更快,但想先在这里征求意见。

JavaScript 中的 JSON 是原生的,而且速度很快。当然比解析 XML 更快。但在 Delphi 中没有本地类可以做到这一点。

所以我的问题是 - 在 Delphi 中使用 XML 或 JSON 解析器库哪个更快?或者它们的速度相等吗?

如果它更快,那么你更喜欢哪个 -Delphi 网络实用程序 http://sourceforge.net/projects/is-webstart/, JSON Delphi 库 http://sourceforge.net/projects/lkjson/ or JSON工具包 http://www.progdigy.com/?page_id=6


通过编写良好的解析器,XML 和 JSON 将具有或多或少相同的时序。您可以拥有一个较慢的 JSON 解析器和一个快速的 XML 解析器。

XML 可能会慢一些,因为语法比 JSON 更复杂。

但瓶颈主要是从硬盘读取,而不是解析内容。

我们使用 JSON 作为 ORM 的客户端/服务器,有几个原因(但你会发现其他原因,我不想在这里恶搞,只是从我们的小实验说起):

  • 与 XML 一样,它是一种基于文本的、人类可读的格式,用于表示简单的数据结构和关联数组(称为对象);
  • 它更易于阅读(对于人类和机器而言)、实现速度更快,并且通常比 XML 更小;
  • 这是一种非常有效的数据缓存格式;
  • 它的布局允许就地重写为单独的以零结尾的 UTF-8 字符串,几乎没有浪费空间:此功能用于将表结果快速从 JSON 转换为文本,无需内存分配或数据复制;
  • 它由 JavaScript 语言原生支持,使其成为任何 AJAX(即 Web 2.0)应用程序中的完美序列化格式;
  • JSON 格式在众所周知且简单的 RFC 中指定;
  • JSON 和 ORM 的默认文本编码都是 UTF-8,它允许存储和通信完整的 Unicode 字符集;
  • 它是自 .NET Framework 3.5 以来在 Windows Communication Foundation (WCF) 中创建的 ASP.NET AJAX 服务使用的默认数据格式;所以微软正式“准备好了”;
  • 对于二进制 blob 传输,没有 XML 中的 CDATA。因此,我们只需将二进制数据编码为 JSON 字符串内的十六进制或 Base64(使用更少的空间)。

关于解析速度,你可以看看我们的来自 SQLite3 结果的就地解析器和 JSON 编写器 http://synopse.info/forum/viewforum.php?id=2。它对速度进行了非常优化,而且速度很快。我们写了一个简单但是高效的 JSON 序列化 http://blog.synopse.info/post/2011/02/23/Fast-JSON-%28un%29serialization对于任何 TPersistent,包括集合。我们只需添加动态数组 JSON 序列化器 http://blog.synopse.info/post/2011/03/12/TDynArray-and-Record-compare/load/save-using-fast-RTTI,这也非常快。

附加说明:

所有这些解析器都与您提到的解析器不同,因为它们解析 JSON 内容并将其格式化为输入缓冲区内的文本:解析期间没有进行内存分配,因此它应该比其他解决方案更快。文本内容未转义,字段以 #0 结束,并计算指向文本开头的指针。因此,要访问一个值,只需使用指针来获取数据即可。它通常会立即解析一些 MB 的 JSON 内容。

另请查看DWS中嵌入的JSON解析器 http://delphitools.info/?s=json。作者声称速度很快。但仍然为每个对象分配了一个内存块。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi 中 JSON 与 XML 解析速度 的相关文章

  • 如何在 ASP.NET MVC 中将 XML 文件发送到客户端

    在 ASP NET MVC 中 我有一个数据库表 我想在某个视图页面上有一个按钮 如果某个用户单击该按钮 我的应用程序将生成包含数据库中所有行的 XML 文件 然后 应将包含 XML 的文件发送到客户端 以便用户看到下载弹出窗口 同样 我希
  • 使用XMLHttpRequest自动网页刷新内存泄漏

    问候 我一直在为一些使用 8 位微控制器的硬件开发网络界面 该网页使用 HTML javascript JSON 和 XHR XMLHttpRequest 进行通信 我想做的是创建一个页面 使用 setInterval 使用控制器中的新值每
  • csv格式是常规语法还是上下文无关语法?

    我目前正在编写一个 csv 解析器 csv 格式的定义由下式给出RFC4180 https www rfc editor org rfc rfc4180这是由 ABNF 定义的 所以csv的定义绝对是上下文无关语法 不过我想知道csv是否是
  • 是否有一个实用程序可以在给定 ANTLR 语法的情况下生成匹配的字符串?

    我有一个 ANTLR 语法 我想模 糊我的解析器 您是否正在寻找 CFG 语法的生成 IE 语法接受的字符串的生成 这可能是检查语法正确性的好主意 但请记住 可接受的字符串集很可能是无限的 任何真正严重的错误应该已经在语法规范中显而易见 并
  • 在 PHP 中验证约 400MB 的大型 XML 文件

    我有一个很大的 XML 文件 大约 400MB 在开始处理之前我需要确保它的格式正确 我尝试的第一件事是类似于下面的内容 这很棒 因为我可以找出 XML 是否格式不正确以及 XML 的哪些部分 不好 doc simplexml load s
  • Delphi中的抽象类

    我正在使用一个具有许多抽象类的组件套件 现在我想应用多态性 但在创建对象时收到错误抽象类 即使我不需要 我是否应该重写所有虚拟方法 有什么解决方法或解决方案吗 为了创建类的实例 您需要重写所有声明为虚拟抽象的方法 即使您不使用它们 如果您确
  • jq Streaming - 过滤嵌套列表并保留全局结构

    在一个大型 json 文件中 我想从嵌套列表中删除一些元素 但保留文档的整体结构 我的示例将其输入为 但真实的输入足够大以要求流式传输 keep untouched keep this this list filter this keep
  • 使用 PHP 和 jSON 从 MySQL 获取 UIImage

    我正在开发一个小型新闻阅读器 它通过对 URL 执行 POST 请求来从网站检索信息 响应是一个带有未读新闻的 JSON 对象 例如 应用程序上的最新新闻的时间戳为 2013 03 01 当用户刷新表时 它会发布 domain com ap
  • 使用 jQuery 获取 JSON Facebook Graph API 用户信息

    我正在尝试使用图形 API 来获取有关用户的一些基本信息 无需用户授权 只需获取公共详细信息 我正在尝试使用 jQuery 和 getJSON 来获取数据并解析它 但我很难弄清楚如何访问我想要的键值对 我想要有类似的东西 var fburl
  • 将 JSON 数组转换为 bash 数组并保留空格

    我想将 JSON 文件转换为 bash 字符串数组 稍后我可以对其进行迭代 我的JSON结构如下 USERID TMCCP CREATED DATE 31 01 2020 17 52 USERID TMCCP CREATED DATE 31
  • 用于冒号分隔标签的 XML 解析器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • wcf json网络服务

    创建 JSON Web 服务的最佳方法是什么 我们还有另一个使用 Java 的团队 他们坚持使用 JSON 完成所有通信 我更喜欢使用 WCF 而不是任何第三方框架 我找到了这个博客 http www west wind com weblo
  • 使用 XPath 3.1 fn:serialize 进行 JSON 序列化

    我在 Saxon HE 9 8 中使用 XSLT 3 0 并且希望将 JSON 文档用作链接数据JSON LD https json ld org 在 JSON LD 中 完整的 HTTP URI 通常显示为值 当我使用 XPath 3 1
  • 如何在 Go 中解组具有多个项目的简单 xml?

    我想从以下 xml 中获取人物 People 的一部分
  • 我们在哪里/什么时候使用 JSON?

    你能告诉我 JSON 有什么用 在 Javascript 和 PHP 中 当我们需要 JSON 方法时 我从以下链接中阅读 但是 我没有获得有关任何项目的 JSON 实现的任何信息 http www json org js html htt
  • c#Registry to XML无效字符问题

    我在尝试从注册表创建 XML 文件时遇到问题 在我的笔记本电脑 W7 64b 上它工作正常 生成了 xml 文件 但在另一台计算机 Xp 32b 上抛出异常 System ArgumentException 十六进制值 0x00 是无效字符
  • 允许 .NET WebApi 忽略 DOCTYPE 声明

    我正在尝试通过 WebApi 方法将 XML 反序列化为对象 我有以下课程 XmlRoot IsNullable false public class MyObject XmlElement Name public string Name
  • 使用 JQuery getJSON 方法

    我正在尝试使用 JQuery getJSON 函数解析 JSON 数据 REST 查询是 http query yahooapis com v1 public yql q select 20woeid 20from 20geo places
  • com.fasterxml.jackson.databind.JsonMappingException:无法反序列化 org.springframework.data.domain.Sort 的实例 START_ARRAY 令牌

    我的 objectMapper 正在获取类型的值Page
  • DELPHI 和 WANT 或 NANT

    We use 巡航控制 net http confluence public thoughtworks org display CCNET Welcome to CruiseControl NET在 Delphi 2006 应用程序中进行持

随机推荐

  • 如何对 Python 字典执行集合运算?

    虽然能够在字典的键之间执行集合操作非常有用 但我经常希望可以对字典本身执行集合操作 我找到了一些服用食谱两个词典的区别 http code activestate com recipes 576644 diff two dictionari
  • 使用 Python 的 ElementTree 查找顶级 xml 注释

    我正在使用 Python 的 ElementTree 解析 xml 文件 如下所示 et ElementTree file file test xml test xml 以几行 xml 注释开头 有没有办法从 et 那里得到这些评论 对于
  • 如何获取 IOrderedQueryable 中项目的索引?

    背景 我正在设计一个类似列表的控件 WinForms 它由DbSet 一个主要要求是它doesn t将整个列表加载到本地内存中 我正在使用一个DataGridView在虚拟模式下作为底层 UI 我正计划实施CellValueNeeded充当
  • ASP.NET MVC - 部分视图可以有控制器吗?

    当我在视图中调用时 Html RenderPartial MyPartialView MyObject 我可以设置它以便该部分视图有一个在调用 RenderPartial 时调用的控制器吗 使用可能会更好渲染动作 http msdn mic
  • 使用 在从 XSL FO 生成的 PDF 中插入换行符

    我正在使用 XSL FO 生成一个包含信息表的 PDF 文件 其中一列是 描述 列 我填充这些描述字段之一的字符串示例如下 This is an example Description br List item 1 br List item
  • 如何访问手机照片库中的图像?

    顺便问一下 有人知道如何访问手机的照片库吗 我正在制作一个应用程序来拍摄植物叶子的照片 分析图像以确定其是否已确定 我们希望我们 可以为用户提供两种选择 拍摄叶子的照片或使用植物的图像 用户已经拿走的叶子 然而 我们拍了照片 但我们没有 知
  • 使用 Spring AOP 进行方法分析(基本执行时间)

    我正在寻找一种功能或软件 它可以让我轻松地分析我的方法执行时间并选择通过包过滤器分析的内容 我知道 它是探查器 101 我使用 TPTP 分析器 但我对此并不满意 坦率地说 我只是不明白它是如何工作的 当我分析我的应用程序 以分析模式启动服
  • xpath:查找不同行中具有相同位置的表格单元格

    我正在解析一个包含如下结构的网页 tr td Label 1 td td Label 2 td td Label 3 td td Something else td lt tr gt tr td Item 1 td td Item 2 td
  • 什么是 {block:Hidden} 以及何时使用它?

    block Hidden
  • htaccess 获取不带路径的文件名

    我正在尝试获取所请求的不带路径的文件名使用 htaccess 作为 RewriteCond REQUEST FILENAME返回完整的绝对路径 但我只需要文件名 例如test php 我一直在寻找这个很多 但找不到任何可以帮助我的东西 感谢
  • Webdeploy权限问题

    我有 3 个 Web 部署 Visual Studio 将项目发布到包 包 我使用 msdeploy 命令与服务器同步 其中一个包是新添加的 除了新添加的包之外 其他两个包都工作正常 我在日志中看到以下错误 我不确定在哪里设置此权限 因为
  • TCP - 接收顺序错误

    是否有可能以错误的顺序 由序列号指示 获取 TCP 数据包 那么接收方会发生什么 例如 是否有任何队列容纳 太早 到达的口袋 或许 接收 TCP 引擎对于要做什么有多种选择 它唯一不能做的就是将这些无序数据包中的数据无序地传递到接收进程 接
  • 表 MYSQL 的密钥文件不正确

    当我想按查询分组时 我收到此错误消息 Incorrect key file for table tmp sql 623d 0 MYI try to repair it 它是一个 InnoDB 表 有 3 000 000 条记录 大小为 4
  • PHP 的设计模式 - 访问者模式与仆人模式

    我发现这两种模式很相似 以及大多数其他行为模式 访客模式 interface Visitor public function visit Visitable Visitable interface Visitable public func
  • java.lang.ClassCastException:org.ksoap2.serialization.SoapPrimitive?

    我正在从我的 Android 客户端应用程序调用 Web 服务 当我尝试显示它时得到响应后 我收到 ClassCastException 以下是我的代码 public void onClick View v setContentView R
  • mysql_insert_id 使用安全吗?

    根据 PHP 文档 mysql insert id从 mysql 表中获取最后插入的 id 我的问题是 如果我有一个网站每秒向数据库插入超过 2 行 我可以使用mysql insert id并获取我在中提到的正确 IDINSERT查询之前的
  • Redis“客户端列表”用途和说明

    在执行 客户端列表 时 我得到以下结果 每个标志的含义是什么 奴隶 addr 100 0 0 0 0000 fd 5 空闲 3 标志 S db 0 sub 0 psub 0 qbuf 0 obl 0 oll 0 事件 r cmd sync
  • 签名板和 dompdf

    我在用托马斯 J 布拉德利的插件 http thomasjbradley ca lab signature pad 用于在 html 表单底部绘制两个签名 然后使用 dompdf 将其转换为 pdf 并使用 sendmail 作为附件通过电
  • Cumulocity smarREST 响应模板

    我正在尝试设置 Cumulocity smartREST 响应模板以提供应用程序存储的设备对象的信息 我认为这是不可能的 但我想确认一下 因为文档很简短而且不清楚 我之前已经成功实现了测量发布模板 但我现在正在尝试执行库存获取 我已经在设备
  • Delphi 中 JSON 与 XML 解析速度

    我们正在创建一个使用大量 XML 解析的应用程序 我想也许可以使用 JSON 因为我们可以使用 JSON 作为 XML 的替代品 我需要测试 JSON 或 XML 哪个更快 但想先在这里征求意见 JavaScript 中的 JSON 是原生