导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2015/2/25 9:09:52
标题:
推荐一delphi-json组件,速度非常快,要比superobject快好几倍
浏览:7835
加入我的收藏
楼主:
https://github.com/ahausladen/JsonDataObjects
----------------------------------------------
-
作者:
drroc (mvcxe)
★☆☆☆☆
-
盒子活跃会员
2015/2/25 15:34:54
1楼:
看了一下用法,蛮简洁的,收藏一下,坐等QJson大神来测速
----------------------------------------------
MVCXE中国首个DELPHI MVC WEB框架:https://www.mvcxe.com/
作者:
2015/2/25 17:34:01
2楼:
快是很快,新开发的软件总会有些bug,大家用用,找些bug出来
----------------------------------------------
-
作者:
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.
----------------------------------------------
-
作者:
2015/2/25 20:25:52
4楼:
老外写测试代码,会从各角度去对比,然后再对比成绩,这个内存占用确实没想过。
----------------------------------------------
-
作者:
2015/2/25 21:00:14
5楼:
Qjson将会与其他的项目形成一个整体的框架,这不是其他的Json可以比的。QJson大神也不会纠结速度这快。现在的精力放在其他方面上
----------------------------------------------
-
作者:
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/
作者:
2015/2/26 23:56:41
8楼:
咋用啊,高手介绍一下喂,谢谢。
----------------------------------------------
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃
作者:
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" } ] } ```
----------------------------------------------
-
作者:
2015/2/28 11:45:20
10楼:
看了下JsonDataObjects的代码,非常之漂亮啊。 使用起来也非常简洁,从测试数据来看性能更是出类拔萃,值得一试! 唯一不足的可能是复杂类型的序列化只支持了Object,没支持record,这个倒也不难,可以自行增加。
----------------------------------------------
-
作者:
2015/2/28 11:46:09
11楼:
看起来确实不错,简洁高效,要看看源码学习一下。
----------------------------------------------
心无挂碍,无有恐怖,远离颠倒梦想,究竟涅槃。
作者:
2015/6/11 14:52:13
12楼:
今天简单用了一下,速度还没测,但简洁的风格非常喜欢!推荐
----------------------------------------------
-delphi大富翁论坛http://www.delphibbs.com
作者:
2015/6/12 10:00:26
13楼:
以前用过SuperObject,这个产品吸收了SuperObject的语法便捷性,对SuperObject的易用性进一步提升,正用于Intraweb做数据解析,推到生产服务器做长跑锻炼。
----------------------------------------------
-
作者:
2015/6/12 11:02:20
14楼:
和SuperObject比,这个可以跨平台,在android下,我试了可用。对于一行数据来说,字段少时,比SuperObject要高效很多,如果把字段数提到1w,这这算法就SuperObject慢了,这和它的数据结构有关
----------------------------------------------
-