JSON vs Delphi中的XML解析速度

时间:2011-03-14 20:34:56

标签: xml json delphi parsing delphi-xe

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

我需要测试哪个是更快的JSON或XML,但想先在这里提出意见。

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

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

如果它比你喜欢的更快 - Delphi Web UtilsJSON Delphi LibraryJSON Toolkit

1 个答案:

答案 0 :(得分: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字符串中。

关于解析速度,您可以查看我们的in-place parser and JSON writer from SQLite3 results。它非常适合速度,而且速度快。我们为任何TPersistent编写了一个简单的efficient JSON serialization,包括集合。我们只需添加a dynamic array JSON serializer,这也非常快。

附加说明:

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

另请查看JSON parser embedded in DWS。作者声称它很快。但是仍然为每个对象分配了一个内存块。