JSON vs Delphi中的XML解析速度

evi*_*one 12 xml delphi parsing json delphi-xe

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

我需要测试哪个是更快的JSON或XML,但想先在这里问一个意见.

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

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

如果它比你更喜欢它更快 - Delphi Web Utils,JSON Delphi LibraryJSON Toolkit

Arn*_*hez 11

使用编写良好的解析器,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.因此,我们只是将二进制数据编码为十六进制或Base64(使用较少的空间)在JSON字符串中.

关于解析速度,您可以从SQLite3结果中查看我们的就地解析器和JSON编写器.它非常适合速度,而且速度快.我们为任何TPersistent 编写了一个简单但高效的JSON序列化,包括集合.我们只需添加一个动态数组JSON序列化程序,它也非常快.

附加说明:

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

另请参阅DWS中嵌入JSON解析器.作者声称它很快.但仍然为每个对象分配了一个内存块.