DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: szliyu112358
今日帖子: 52
在线用户: 15
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2015/2/25 9:09:52
标题:
推荐一delphi-json组件,速度非常快,要比superobject快好几倍 浏览:7743
加入我的收藏
楼主: https://github.com/ahausladen/JsonDataObjects
----------------------------------------------
-
作者:
男 drroc (mvcxe) ★☆☆☆☆ -
盒子活跃会员
2015/2/25 15:34:54
1楼: 看了一下用法,蛮简洁的,收藏一下,坐等QJson大神来测速
----------------------------------------------
MVCXE中国首个DELPHI MVC WEB框架:https://www.mvcxe.com/
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2015/2/25 17:34:01
2楼: 快是很快,新开发的软件总会有些bug,大家用用,找些bug出来
----------------------------------------------
-
作者:
男 err0rc0de (code) ▲▲▲▲△ -
普通会员
2015/2/25 20:24:05
3楼: jsonDataObjects确实很牛X,顶。

下面是mORMot\SQLite3\Samples\25 - JSON performance下编绎的测试结果:
有些json文件不好下,折腾了好久。

   JSON benchmarking
  ----------


1. Small content

 1.1. Synopse record:
  - Read: 50,000 assertions passed  124.90ms  400,294/s
  - Access: 100,000 assertions passed  677us  73,855,243/s
  - Write: 50,000 assertions passed  138.00ms  362,303/s
  Total failed: 0 / 200,000  - Synopse record PASSED  263.97ms

 1.2. Synopse variant:
  - Read: 50,000 assertions passed  278.98ms  179,221/s
  - Access direct: 100,000 assertions passed  48.79ms  1,024,737/s
  - Access late binding: 100,000 assertions passed  222.99ms  224,221/s
  - Write: 50,000 assertions passed  164.46ms  304,017/s
  Total failed: 0 / 300,000  - Synopse variant PASSED  715.76ms

 1.3. Synopse cross platform variant:
  - Read: 50,000 assertions passed  506.22ms  98,769/s
  - Access direct: 100,000 assertions passed  30.37ms  1,645,873/s
  - Access late binding: 100,000 assertions passed  146.95ms  340,242/s
  - Write: 50,000 assertions passed  301.52ms  165,823/s
  Total failed: 0 / 300,000  - Synopse cross platform variant PASSED  986.43ms

 1.4. QDAC:
  - Read: 50,000 assertions passed  554.10ms  90,235/s
  - Access: 100,000 assertions passed  75.06ms  666,062/s
  - Write: 50,000 assertions passed  282.09ms  177,243/s
  Total failed: 0 / 200,000  - QDAC PASSED  913.37ms

 1.5. Json data objects:
  - Read: 50,000 assertions passed  139.29ms  358,945/s
  - Access: 100,000 assertions passed  6.39ms  7,819,831/s
  - Write: 50,000 assertions passed  84.45ms  592,066/s
  Total failed: 0 / 200,000  - Json data objects PASSED  232.09ms


2. Big content

 2.1. Depth content:
  - Download files if necessary: no assertion  21.68ms
  - Synopse read variant: 1 assertion passed  132.10ms  378,478/s  227 KB
  - Synopse cross platform: 1 assertion passed  3.63ms  13,774,104/s  300 KB
  - Json data objects read: 1 assertion passed  2.44ms  20,475,020/s  272 KB
  - QDAC read: 1 assertion passed  6.16ms  8,105,041/s  371 KB
  Total failed: 0 / 4  - Depth content PASSED  192.93ms

 2.2. Table content:
  - Download files if necessary: no assertion  317us  25,955,835/s
  - Synopse parse: 1 assertion passed  2.11ms  3,889,834/s  1.2 MB
  - Synopse table cached: 41,135 assertions passed  2.69ms  3,048,165/s  1.2 MB
  - Synopse table index: 41,135 assertions passed  3.89ms  2,114,366/s  1.2 MB
  - Synopse table loop: 41,135 assertions passed  4.56ms  1,802,980/s  1.2 MB
  - Synopse table variant: 41,135 assertions passed  33.39ms  246,324/s  1.2 MB
  - Synopse ORM loop: 41,135 assertions passed  5.30ms  1,550,216/s  1.2 MB
  - Synopse ORM list: 41,135 assertions passed  6.11ms  1,346,260/s  1.0 MB
  - Synopse doc variant: 41,137 assertions passed  30.14ms  272,896/s  3.0 MB
  - Synopse late binding: 41,137 assertions passed  44.41ms  185,221/s  3.0 MB
  - Synopse cross ORM: 41,135 assertions passed  19.97ms  411,823/s  1.9 MB
  - Synopse cross direct: 41,135 assertions passed  21.69ms  379,246/s  1.9 MB
  - Synopse cross variant: 41,135 assertions passed  37.25ms  220,805/s  1.9 MB
  - JsonDataObjects: 41,136 assertions passed  13.57ms  605,995/s  2.6 MB
  - QDAC: 41,136 assertions passed  33.15ms  248,159/s  5.7 MB
  Total failed: 0 / 534,762  - Table content PASSED  331.64ms

 2.3. Huge content:
  - Download files if necessary: no assertion  574us
  - Synopse beautifier: 1 assertion passed  1.95s  25,537/s  160 B
  - Synopse read record: 4 assertions passed  1.26s  163,249/s  113.5 MB
  - Synopse read variant: 2 assertions passed  2.81s  73,283/s  377.4 MB
  - Synopse cross platform: 2 assertions passed  5.43s  37,982/s  424.3 MB
  - Json data objects read: 2 assertions passed  1.62s  127,008/s  329.6 MB
  - Json data objects beautifier: no assertion  7.12s  7,014/s  510.6 MB
  - QDAC read: 2 assertions passed  7.58s  27,248/s  1.1 GB
  Total failed: 0 / 13  - Huge content PASSED  30.94s


Generated with: Delphi 2010 compiler

Time elapsed for all tests: 34.58s
Tests performed at 2015/2/25 20:19:31

Total assertions failed for all test suits:  0 / 1,734,779
! All tests passed successfully.
----------------------------------------------
-
作者:
男 err0rc0de (code) ▲▲▲▲△ -
普通会员
2015/2/25 20:25:52
4楼: 老外写测试代码,会从各角度去对比,然后再对比成绩,这个内存占用确实没想过。
----------------------------------------------
-
作者:
男 wuxi15 (似水·流年) ▲▲▲▲▲ -
普通会员
2015/2/25 21:00:14
5楼: Qjson将会与其他的项目形成一个整体的框架,这不是其他的Json可以比的。QJson大神也不会纠结速度这快。现在的精力放在其他方面上
----------------------------------------------
-
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2015/2/26 9:58:37
6楼: 感谢大家对QJSON的关注,因为暂时主要实现QDAC的后续组件,QJSON 暂时不做速度的进一步优化,等后续组件差不多的时候,会参考 Andy 的实现进一步优化 QJSON,争取速度进一步提升,同时提供类似于 synopse 样式的直接读取到记录的功能。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 drroc (mvcxe) ★☆☆☆☆ -
盒子活跃会员
2015/2/26 10:38:29
7楼: MVCXE可以考虑用jsonDataObjects了,简洁简单,就一个pas文件
----------------------------------------------
MVCXE中国首个DELPHI MVC WEB框架:https://www.mvcxe.com/
作者:
女 google220 (google220) ★☆☆☆☆ -
普通会员
2015/2/26 23:56:41
8楼: 咋用啊,高手介绍一下喂,谢谢。
----------------------------------------------
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2015/2/27 22:57:22
9楼: andy 自带例子
Json Data Objects
==========

This Delphi unit contains a JSON parser that supports Delphi 2009-XE7 and the platforms
Win32, Win64 and ARM Android (MacOS and iOS may work).

Clone with GIT
----------
```
> git clone git@github.com:ahausladen/JsonDataObjects.git
```
or
```
> git clone https://github.com/ahausladen/JsonDataObjects.git
```

This will get you the Json Data Objects repository.

How to install
----------
1. Clone the JsonDataObjects repository
2. Add the JsonDataObjects.pas unit to your project.

Features
--------
* Fast dual JSON parser for parsing UTF8 and UTF16 without conversion
* Automatic creation of arrays and objects
* Easy access mode with implicit operators
* Compact and formatted output modes
* Win32, Win64 and ARM Android support (MacOS and iOS may work)

Usage
-----
Simple example
```Delphi
var
  Obj: TJsonObject;
begin
  Obj := TJsonObject.Parse('{ "foo": "bar", "array": [ 10, 20 ] }') as TJsonObject;
  try
    ShowMessage(Obj['foo']);
    ShowMessage(IntToStr(Obj['array'].Count));
    ShowMessage(IntToStr(Obj['array'].Items[0]));
    ShowMessage(IntToStr(Obj['array'].Items[1]));
  finally
    Obj.Free;
  end;
end;
```

Filling and serializing JSON objects
```Delphi
var
  Obj, ChildObj: TJsonObject;
begin
  Obj := TJsonObject.Create;
  try
    // easy access
    Obj['foo'] := 'bar';
    // normal (and faster) access
    Obj.S['bar'] := 'foo';
    // automatic array creation, Obj is the owner of 'array'
    Obj.A['array'].Add(10);
    Obj.A['array'].Add(20);
    // automatic object creation, 'array' is the owner of ChildObj
    ChildObj := Obj.A['array'].AddObject;
    ChildObj['value'] := 12.3;
    // automatic array creation, ChildObj is the owner of 'subarray'
    ChildObj.A['subarray'].Add(100);
    ChildObj.A['subarray'].Add(200);

    ShowMessage(Obj.ToJSON({Compact:=}False));
  finally
    Obj.Free;
  end;
```
```JSON
{
  "foo": "bar",
  "bar": "foo",
  "array": [
    10,
    20,
    {
      "value": 12.3,
      "subarray": [
        100,
        200
      ]
    }
  ]
}
```

Copying JSON objects with `Assign`
```Delphi
var
  Obj, ClonedObj: TJsonObject;
begin
  Obj := TJsonObject.ParseUtf8('{ "foo": [ "bar", {}, null, true, false, { "key": "value" } ] }') as TJsonObject;
  try
    ClonedObj := TJsonObject.Create;
    try
      // Make a copy of Obj
      ClonedObj.Assign(Obj);
      ShowMessage(ClonedObj.ToJSON(False));
    finally
      ClonedObj.Free;
    end;
  finally
    Obj.Free;
  end;
end;
```
```JSON
{
  "foo": [
    "bar",
    {},
    null,
    true,
    false,
    {
      "key": "value"
    }
  ]
}
```
----------------------------------------------
-
作者:
男 souledge (souledge) ★☆☆☆☆ -
普通会员
2015/2/28 11:45:20
10楼: 看了下JsonDataObjects的代码,非常之漂亮啊。

使用起来也非常简洁,从测试数据来看性能更是出类拔萃,值得一试!

唯一不足的可能是复杂类型的序列化只支持了Object,没支持record,这个倒也不难,可以自行增加。
----------------------------------------------
-
作者:
男 iceair (冰晰空气) ★☆☆☆☆ -
盒子活跃会员
2015/2/28 11:46:09
11楼: 看起来确实不错,简洁高效,要看看源码学习一下。
----------------------------------------------
心无挂碍,无有恐怖,远离颠倒梦想,究竟涅槃。
作者:
男 FengLinYuShu (FengLinYuShu) ★☆☆☆☆ -
盒子活跃会员
2015/6/11 14:52:13
12楼: 今天简单用了一下,速度还没测,但简洁的风格非常喜欢!推荐
----------------------------------------------
-delphi大富翁论坛http://www.delphibbs.com
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2015/6/12 10:00:26
13楼: 以前用过SuperObject,这个产品吸收了SuperObject的语法便捷性,对SuperObject的易用性进一步提升,正用于Intraweb做数据解析,推到生产服务器做长跑锻炼。
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2015/6/12 11:02:20
14楼: 和SuperObject比,这个可以跨平台,在android下,我试了可用。对于一行数据来说,字段少时,比SuperObject要高效很多,如果把字段数提到1w,这这算法就SuperObject慢了,这和它的数据结构有关
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行484.375毫秒 RSS