DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: rlatershee
今日帖子: 43
在线用户: 13
导航: 论坛 -> 发布控件 斑竹:liumazi,ruralboy  
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/4 20:53:34
标题:
QJSON-跨平台的JSON解析器 浏览:10676
加入我的收藏
楼主: 速度我只跟系统的和RTC的比较了下,明显更快。
QJSON的接口和QXML保持大体一致。
http://bbs.2ccc.com/topic.asp?topicid=453743
具体不多说,需要的拿去慢慢体会。
有问题请在下面跟帖报告,或加入QDAC官方群及时反馈。
此帖子包含附件:chineseswish_201454205334.zip 大小:91.1K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/4 21:01:01
1楼: 实测IO结果:
生成一个包含100万个结点的JSON对象,用时312ms,保存后文件大小为24.5 MB,用时1123ms,保存速度为21.89MB/S
加载上面生成的JSON文件,用时1061ms,速度:23.16MB/S
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2014/5/4 21:43:44
2楼:
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
作者:
男 chscheese (chscheese) ★☆☆☆☆ -
盒子活跃会员
2014/5/4 21:50:34
3楼: 好~!
----------------------------------------------
-
作者:
男 FengLinYuShu (FengLinYuShu) ★☆☆☆☆ -
盒子活跃会员
2014/5/4 22:03:53
4楼: 支持!
----------------------------------------------
-delphi大富翁论坛http://www.delphibbs.com
作者:
男 movedown (movedown) ▲▲▲▲△ -
注册会员
2014/5/4 22:07:25
5楼: 顶起,连发两个好东西啊!
----------------------------------------------
-
作者:
男 iny (盒子) ★☆☆☆☆ -
盒子活跃会员
2014/5/4 23:07:28
6楼: 非常好的东东,强烈支持,Delphi开源的好东东太少了
----------------------------------------------
-
作者:
男 sqlnew (sqlnew) ★☆☆☆☆ -
盒子活跃会员
2014/5/5 0:18:28
7楼: 好东西一定要支持
----------------------------------------------
-
作者:
男 haoxiongdi (好兄弟) ★☆☆☆☆ -
盒子活跃会员
2014/5/5 2:18:46
8楼: 不错,还是开源的,强烈支持。
----------------------------------------------
-
作者:
男 szlbz (szlbz) ★☆☆☆☆ -
盒子活跃会员
2014/5/5 5:54:15
9楼: 支持原创
----------------------------------------------
-
作者:
男 shloverxp (shloverxp) ★☆☆☆☆ -
盒子活跃会员
2014/5/5 8:39:10
10楼: 能不顶吗?不能!
----------------------------------------------
-
作者:
男 zxh3344 (zxh3344) ▲▲▲▲▲ -
注册会员
2014/5/5 9:24:34
11楼: 不得不顶啊
----------------------------------------------
-
作者:
男 meaisu (meaisu) ▲▲▲▲▲ -
普通会员
2014/5/5 10:14:29
12楼: 建议楼主搞个类似gson的JsonReader和JsonWriter,特别实用。
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/5 10:39:20
13楼: To 12楼 meaisu (meaisu)
==========
整那玩意干嘛?QJSON支持RTTI,可以直接将对象或结构体保存到JSON中,也可以直接从JSON中还原。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/5 11:21:47
14楼: JsonReader和JsonWriter我具体没看,12楼可以加群介绍下,看看是否真的有那种需要。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 meaisu (meaisu) ▲▲▲▲▲ -
普通会员
2014/5/5 11:42:04
15楼: 这是java里面的功能,我用过,感觉比较好用。其实还有一个类,叫JsonStream,跟delphi里面的Stream差不多。
JsonWriter应用环境是这样的:比如服务器端,你要给客户端发送一个很庞大的json,这时候我总不能在服务器端先生成json对象,再ToString吧?这会很占内存,gson的做法是JsonWriter连接JsonStream,JsonStream连接SocketStream,这时候每写入一个元素就直接发送到了客户端,而服务器不会吃内存。

JsonReader也是个挺好的东西,类似delphi的StreamReader,有个peek函数,可预知下一个元素是什么类型,比如BeginArray、EndArray、BeginObject、EndObject、Name、String、Number、Boolean、Null,EndDocument等。在读取大json文件、流的时候可以不占用内存,按需读取。
----------------------------------------------
-
作者:
男 meaisu (meaisu) ▲▲▲▲▲ -
普通会员
2014/5/5 11:52:14
16楼: 我自己写了个dbx驱动,用http协议,服务器端是tomcat+java,数据是json格式。服务器端就利用了gson库,感觉真好用,所以推荐有技术的人能在delphi下面搞一个出来,也让我们写代码简单点。
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/5 13:07:27
17楼: 明白了
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/5 21:06:14
18楼: to 16楼 meaisu (meaisu)
==========
暂时QJSON实现这个还是有一定的困难,您的那种需求我觉得没必要那么处理。你为什么不这么处理:
{"record1":{"id":100,"name":"name1"}}
{"record2":{"id":200,"name":"name2"}}
{"record3":{"id":300,"name":"name3"}}
这样子每条记录一个Json对象,客户端可以循环加载,开销也小,服务器端开销也小,对吧。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 ztdcy (ztdcy) ▲▲▲▲▲ -
注册会员
2014/5/5 21:16:32
19楼: 支持原创。支持开源。
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/5 21:33:45
19楼: to 16楼 meaisu (meaisu)
==========
按照上面的思想,给你写了一个简单的例子供你参考:
procedure TForm1.Button7Click(Sender: TObject);
var
  AStream:TMemoryStream;
  AJson:TQJson;
  S:QStringW;
  procedure ParseJsonBlock(AStream:TStream);
  var
    c:QCharW;
    ABuilder:TQStringCatHelperW;
    ABlockCount,I,ACount:Integer;
  begin
  ABuilder:=TQStringCatHelperw.Create;
  try
    ABlockCount:=0;
    repeat
      if ABlockCount=0 then
        begin
        repeat
          AStream.ReadBuffer(c,SizeOf(QCharW));
          ABuilder.Cat(c);
        until c='{';
        Inc(ABlockCount);
        end;
      AStream.ReadBuffer(c,SizeOf(QCharW));
      if c='{' then
        Inc(ABlockCount)
      else if c='}' then
        Dec(ABlockCount);
      ABuilder.Cat(c);
    until ABlockCount=0;
    AJson.Clear;
    AJson.Parse(ABuilder.Value);
  finally
    ABuilder.Free;
  end;
  end;
begin
AStream:=TMemoryStream.Create;
AJson:=TQJson.Create;
try
  AJson.DataType:=jdtObject;
  S:='{"record1":{"id":100,"name":"name1"}}'#13#10+
    '{"record2":{"id":200,"name":"name2"}}'#13#10+
    '{"record3":{"id":300,"name":"name3"}}'#13#10;
  AStream.Write(PQCharW(S)^,Length(S) shl 1);
  AStream.Position:=0;
  ParseJsonBlock(AStream);
  ShowMessage(AJson.AsJson);
  ParseJsonBlock(AStream);
  ShowMessage(AJson.AsJson);
  ParseJsonBlock(AStream);
  ShowMessage(AJson.AsJson);
finally
  AStream.Free;
  AJson.Free;
end;
end;
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/5 21:48:30
20楼: 按块解析JSON效果
此帖子包含附件:
JPEG 图像
大小:378.6K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/5 22:49:06
21楼: 将上面的代码封装到QJSON里了,代码简化为
AJson.Clear;//清除末次的解析结果
AJson.ParseBlock(AStream,teUnicode16LE);
即可解析一块。
此帖子包含附件:chineseswish_20145522496.zip 大小:91.8K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 www12345 (风云) ★☆☆☆☆ -
盒子活跃会员
2014/5/6 8:07:51
22楼: 不用也支持一下
----------------------------------------------
一卡通专家的中专家www.cnduh.com
作者:
男 ander5115 (Ander) ★☆☆☆☆ -
普通会员
2014/5/6 10:23:51
23楼: 解析下面这个json文件失败,我用lkjson是解析成功的,并且很快,读取都成功。
此帖子包含附件:ander5115_201456102351.zip 大小:142.7K
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/6 11:29:25
24楼: to 23楼 ander5115 (Ander)
==========
已解决,请更新下就好。
此帖子包含附件:chineseswish_201456112925.zip 大小:92.1K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 zrygo (大飞) ▲▲▲△△ -
注册会员
2014/5/6 14:24:44
25楼: 支持,用过superobject解析JSON,不知道相比怎么样
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/6 15:31:19
26楼: to 25 楼 zrygo (大飞)
==========
据群里的朋友讲要比他快
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 ander5115 (Ander) ★☆☆☆☆ -
普通会员
2014/5/6 15:37:05
26楼: to 24楼,我测试了一下,解析速度还是有问题,我用lkjson只需要170毫秒左右,用你的类解析需要大约3秒。改进的空间还很大啊。
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/6 18:15:58
27楼: to 26楼 nder5115 (Ander)
==========
我下载lkjson看看,你是在XE6还是2007下的环境下?
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 ander5115 (Ander) ★☆☆☆☆ -
普通会员
2014/5/6 18:44:27
28楼: lkjson是在2009下
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/6 18:58:12
28楼: 加载一个24.5MB的JSON文件,物理机是XE6,虚拟机是Delphi2007,测试结果如下:

XE6:
   QJson加载用时:1264ms,速度:19.44MB,lkJson加载用时:5054ms,速度:4.86MB。

Delphi 2007
   QJson加载用时:3595ms,速度:6.83MB,lkJson加载用时:5538ms,速度:4.43MB

附图是Delphi 2007的测试结果
此帖子包含附件:
JPEG 图像
大小:41.5K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/6 18:59:53
29楼: 下面这个图是XE6的:
此帖子包含附件:
JPEG 图像
大小:59.4K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/6 21:55:48
30楼: QJSON的Parse函数修改了下行为,保持与QXML一致
此帖子包含附件:chineseswish_201456215547.zip 大小:230.3K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 cfish828 (一天到晚游泳的鱼) ★☆☆☆☆ -
盒子活跃会员
2014/5/7 0:27:33
31楼: 楼主牛人造福delphier,太感谢了!给你点320个赞!
----------------------------------------------
-
作者:
男 xgwzw (hanry) ★☆☆☆☆ -
普通会员
2014/5/7 20:19:53
32楼: Demo 编译报错 AJson.AddRecord 这个函数 报参数不匹配
----------------------------------------------
-
作者:
男 ander5115 (Ander) ★☆☆☆☆ -
普通会员
2014/5/8 15:00:25
33楼: 我那个json文件的关键不是节点有多么巨大,而是某几个节点的string值非常长,所以在我这侧到是qjson比较慢,lkjson比较快。巨多节点的我还真没怎么测过,因为我这用不到。
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/9 13:16:55
34楼: to 33楼 ander5115 (Ander)
==========
感谢反馈,问题已修正,新版带BOM的UTF-8编码JSON加载比lkJSON快,Ansi编码由于需要转码,要比lkJson稍慢,实际用于解析时间要比lkJson快。

加载内容为一个10MB的QJSON长字符串

Delphi 2007虚拟机测试:

解析速度测试:QJson=80ms,lkJson=120ms
加载速度测试(ANSI):QJson=180ms,lkJson=131ms
加载速度测试(UTF8):QJson=140ms,lkJson=130ms

XE6物理机测试:

解析速度测试:QJson=78ms,lkJson=156ms
加载速度测试(ANSI):QJson=156ms,lkJson=156ms
加载速度测试(UTF8):QJson=109ms,lkJson=156ms
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/9 13:19:58
35楼: 盒子快成蜗牛了,最新版:
* 修正了与D2007的兼容性。
* 优化了BuildJsonString代码,加速超长字符串的处理速度,解决盒子网友ander5115报告长字符串时,加载速度慢的问题。
* 解析出错时,明确出错的行列及行的内容。
* 数组成员如果有名称,编码时忽略。
* SetValue时,如果DataType为jdtUnknown,则会自动检测内容。
* 合并了不得闲的XE下,ShortString的处理代码
+ 构造函数直接创建名称和值对的组合。
+ 加入了FreeObject函数来替代原来的DisposeOf和Free的处理,减少条件编译代码。
+ 直接调用Add添加动态数组元素时,加入Variant和TQJson类型的支持。
此帖子包含附件:chineseswish_201459131958.zip 大小:107.5K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/9 20:23:04
36楼: 进一步优化调整后的QJSON,速度比上一版本有更好的提升。
另外修正了解析\uxxxx编码时转义存在的问题
此帖子包含附件:chineseswish_20145920234.zip 大小:245.9K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/9 20:24:34
37楼: 优化后的QJSON与lkJSON测试速度比较(在XE6下编译)
此帖子包含附件:
JPEG 图像
大小:180.3K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 cfish828 (一天到晚游泳的鱼) ★☆☆☆☆ -
盒子活跃会员
2014/5/10 11:18:30
38楼: 赞一个! 希望能更新到 sourceforge方便下载最新版本
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/5/10 21:00:35
39楼: 试了下速度还可以,比superobject快一些(解析10万次简单文本,superobject用1.8秒,这个用1.4秒多),但superobject的接口方式,易用些
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/11 9:15:41
40楼: 除了速度快,更重要的是QJSON跨平台,支持Win32/Win64/Andriod/iOS/OSX,所有XE6支持的平台它都支持
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/11 10:37:37
41楼: 看那么多人用superobject,我就做了一个测试程序来全面测试下QJSON/lkJSON/SuperObject的速度,结果如下,从中可以看出SuperObject主要的弱项在保存成JSON格式时,比lkJSON和QJSON根本不在一个数量级。而其它测试也表明QJSON在各项的解析上均要强于其它两个对手。
此帖子包含附件:
JPEG 图像
大小:501.4K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/11 10:39:26
42楼: 比较程序,源码在QDAC官方QQ群共享,需要的可以加群下载。
此帖子包含附件:chineseswish_2014511103925.zip 大小:1.12M
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/13 8:24:32
43楼: 例行更新,加入了OnQJsonCreate和OnQJsonFree两个事件回调来支持外部的对象池管理
此帖子包含附件:chineseswish_201451382432.zip 大小:246.8K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 doremi (天籁之音) ▲▲▲△△ -
注册会员
2014/5/14 8:29:45
44楼: 收藏先
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/14 11:02:46
45楼: + 增加CopyIf/DeleteIf/FindIf函数
* 修正了允许未命名结点编码的问题
* 修正了ForcePath时非数组类型的结点允许按数组访问的问题
此帖子包含附件:chineseswish_201451411246.zip 大小:248.6K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hellbeast (哭泣的大头) ▲▲▲▲▲ -
普通会员
2014/5/14 14:48:38
46楼: 支持,如果像superjson 那样做成接口的样子可能用起来更方便
----------------------------------------------
-
作者:
男 tree2005 (Hello) ★☆☆☆☆ -
普通会员
2014/5/15 8:04:46
47楼:     支持lz。支持开源!
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/15 12:54:35
48楼: 2014.5.15 更新
==========
修正了属性Path取值不对的问题
此帖子包含附件:chineseswish_2014515125435.zip 大小:233.8K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/16 14:41:03
49楼: 2014-5-16 更新
==========
* 优化了ItemByPath/ItemByName/IndexOf方法,使用哈希函数来加快查找速度
此帖子包含附件:chineseswish_201451614413.zip 大小:234.3K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 1314tim (五毒公主) ★☆☆☆☆ -
普通会员
2014/5/16 15:30:50
50楼: TO meaisu (meaisu):
JsonStream在 Diocp开源项目里有  实现了编码和解码 用的superobject
----------------------------------------------
五毒公主 认准了delphi ,没经历学更多 就努力成功delphi高手吧
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/19 14:42:56
51楼: 2014-5-19更新
==========
* 修正了日期时间类型编码时的小Bug
此帖子包含附件:chineseswish_2014519144256.zip 大小:234.3K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 adamwu (AdamWu) ▲▲▲▲△ -
注册会员
2014/5/22 6:26:53
52楼: 楼主,刚才看到更多的JSON库,可否比较?

http://blog.synopse.info/post/json-benchmark-delphi-mormot-superobject-dwsjson-dbxjson
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/23 9:41:31
53楼: 没啥不可以比较的吧,你可以测试下。不过大家都同SuperObject进行了比较,你可以以它为基准,然后简单的对比看看。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/5/25 9:25:03
54楼: //我想将其改造成superobject方式,试了下,但发现节点多时(测10万节点)很慢,主要慢在ItemByName

  TQJson = class
  private
    function GetS(const path: string): string;
    procedure SetS(const path, Value: string);
  public
    
    property S[const path: string]: string read GetS write SetS;
  end;

//

function TQJson.GetS(const path: string): string;
begin
  Result := ValueByName(path, '');
end;

procedure TQJson.SetS(const path, Value: string);
var
  AChild: TQJson;
begin
  AChild := ItemByName(path);

  if Assigned(AChild) then
  begin
    AChild.Value := Value;
  end
  else
  begin
    Add(path, Value, jdtString);
  end;
end;


//如10万节点,几乎计算不下来,约180秒,慢在ItemByName。另外,包括ValueByName都慢,如果用在服务器上,估计把cpu全占了
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/5/25 9:36:00
55楼: --这是测试代码
procedure TForm1.Button1Click(Sender: TObject);
var
  AJson: TQJson;
  I: Integer;
  T: Cardinal;
begin
  AJson := TQJson.Create;
  try
    T := GetTickCount;
    for I := 0 to 10000 * 10 do
    begin
      AJson.S['abc' + IntToStr(i)] := 'hello' + IntToStr(i * 10);
    end;
    T := GetTickCount - T;
    {
    T := GetTickCount;
    for I := 0 to 10000 * 10 do
    begin
      AJson.S['abca'];
    end;
    T := GetTickCount - T;
    }
    mmResult.Clear;
    mmResult.Lines.Add('添加100,000个结点用时:' + IntToStr(T) + 'ms');
  finally
    AJson.Free;
  end;
end;
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/25 16:09:38
56楼: QJson本身没有为这种用法做优化,如果使用这种用法,最方便的方式是为TQJson加入哈希支持,需要在Add(AName...)的几个函数在IndexOf函数中加入哈希处理,但这个个人不倾向于改造成这个样子,如果需要,你可以联系我,我将哈希表的相关代码给你,然后你自己简单改造下。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/5/25 17:39:03
57楼: 谢谢,我这段时间刚好有空,把superoject,xsuperobject,dwsJson和楼主的Qjson测了下,个人觉得从语法上superoject好用些,我把dwsJson,QJson改成superoject的样子,试了下,没仔细研究,发现dwsJson,QJson都会慢,看了下代码,大概明白,主要数据存储结构原因。如果跨平台QJson还是不错的。xsuperobject慢,而且bug及内存泄露多。superoject和dwsJson只能用在windows下
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/25 18:46:33
57楼: 我做了一个辅助工具类,继承了TQJson,然后重载了那几个方法。测试添加10万记录用时在100ms左右
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/5/25 18:51:31
58楼: 好的,什么时候发上来,我试一下。原来,如果节点多时,的ValueByName就会很慢
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/25 20:20:24
58楼: to 57楼 hq200306 (200306)
==========
上传下我写的参考代码和测试代码,因为我不用SuperObject,所以只简单实现了几个。用你测试用例的写法,速度大约是SuperObject的3-5倍之间。
此帖子包含附件:chineseswish_2014525202024.zip 大小:133.0K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/25 20:22:39
59楼: S:String;
  AJson: TSuperObjectHelper;
  AJson2:TQJson;
  ASuper:ISuperObject;
  I: Integer;
  T,TS: Cardinal;
begin
  AJson := TSuperObjectHelper.Create;
  try
    T := GetTickCount;
    for I := 0 to 10000 * 10 do
    begin
      S:='abc' + IntToStr(i);
      AJson.S[S] := 'hello' + IntToStr(i * 10);
      AJson.S[S];
//      if  AJson.IndexOf(S)=-1 then
//        ShowMessage('Not found');
    end;
    T := GetTickCount - T;
    ASuper:=TSuperObject.Create();
    TS:=GetTickCount;
    for I := 0 to 10000 * 10 do
    begin
      S:='abc' + IntToStr(i);
      ASuper.S[S] := 'hello' + IntToStr(i * 10);
      ASuper.S[S];
    end;
    TS := GetTickCount - TS;
    ShowMessage('QJson添加100,000个结点用时:' + IntToStr(T) + 'ms,SuperObject='+IntToStr(TS)+'ms');
此帖子包含附件:
JPEG 图像
大小:39.1K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/5/25 21:01:29
60楼: 对简单类型测了下,速度确实不错。我还没有对数组及对象类型测试,一旦有别的发现,将反馈,superobject的getD是double,getC是Currency,这都是小问题,想用的人自己改改
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/25 21:26:39
61楼: to 60楼 hq200306
==========
哈哈,我只是写了个例子,没具体去查superobject的接口,欢迎加群讨论反馈。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/5/25 21:34:56
62楼: superobject一些细节,例如i=AJson.I['xxx'],当'xxx'不存在时,则i=0,这些小问题,用TQJson的开发者估计要自己掌握,我是把代码改为

function TQJson.GetAsInt64: Int64;
begin
  if DataType = jdtInteger then
    Result := PInt64(FValue)^
  else if DataType in [jdtFloat, jdtDateTime] then
    Result := Trunc(PExtended(FValue)^)
  else if DataType = jdtBoolean then
    Result := Integer(AsBoolean)
  else if DataType = jdtString then
    Result := Trunc(AsFloat)
  else if DataType = jdtUnknown then
    Result := 0
  else
    raise Exception.Create(Format(SBadConvert, [JsonTypename[Integer(DataType)], 'Numeric']))
end;
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/27 20:57:30
63楼: 2014-5-27
=========
+ TQHashedJson对象,继承自TQJson,但加入了哈希表来优化通过名称访问节点的速度,要实现类似于SuperObject类似的接口,请继承自它,以便保证相关按名称访问的方法的速度得到充分优化
此帖子包含附件:chineseswish_2014527205729.zip 大小:244.6K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/5/27 22:30:10
64楼: 1.觉得TQHashedJson.Add要按下面的写法

function TQHashedJson.Add(AName: QStringW): TQJson;
begin
  Result := inherited Add(AName);

  Result.FNameHash := HashOf(PQCharW(AName), Length(AName) shl 1);
  FHashTable.Add(Pointer(Count - 1), Result.FNameHash);
end;

2. function CreateJson: TQJson; override;
改为
function CreateJson: TQJson; inline;
要快一些
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/5/27 22:52:57
65楼: 楼主是不是改乱了,执行演示程序的第一个按键都有报错
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/5/28 8:36:09
66楼: @hq200306
==========
不好意思,合并代码时确实改错了。Add函数时,添加重了造成的。
你反馈的第一个问题是对的,是我马虎了。
第二个问题主要是因为要子类要重载,所以没法用inline,要不确实要快一些。
问题已经改掉了
此帖子包含附件:chineseswish_20145288368.zip 大小:244.6K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hellbeast (哭泣的大头) ▲▲▲▲▲ -
普通会员
2014/6/12 9:34:50
67楼: 楼主,函数ItemByPaht返回错误
{"A":[1,2,3,5],"B":97.64,"C":{"A":"1234zxc","B":9548.25664}}
取A.[1]应该返回2
结果返回[1,2,3,5]
好像凡是涉及到数组的都有问题
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/6/12 17:25:20
68楼: 我测试了下,好象没你说的问题:
AJson.Parse('{"A":[1,2,3,5],"B":97.64,"C":{"A":"1234zxc","B":9548.25664}}');
ShowMessage(AJson.ItemByPath('A[1]').AsString);
得到的结果是2
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hellbeast (哭泣的大头) ▲▲▲▲▲ -
普通会员
2014/6/14 8:44:53
69楼: 恩,我又测试了下 多打了个. 应该用A[1] 而不是A.[1]
:)
----------------------------------------------
-
作者:
男 eastroads (eastroads) ▲▲▲▲▲ -
注册会员
2014/6/14 12:21:27
70楼: 楼主牛逼,采用楼主的方案,后台用qjson,手机端用rest接收qjson处理,完美应用json通讯。又快又好!
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/6/17 13:59:09
71楼: 2014.6.17
=========
+ AsFloat加入对NaN、±∞的检查,避免写入
+ AsVariant加入对varNull,varEmpty,varUInt64的支持
此帖子包含附件:chineseswish_201461713599.zip 大小:47.6K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 xxhadsg (garfield) ★☆☆☆☆ -
盒子活跃会员
2014/6/17 18:28:37
72楼: 支持楼主,辛苦了!
----------------------------------------------
这个世界上还有很多比钱更重要的东西,比如说意大利面---加菲猫
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/6/22 8:23:43
73楼: * 重新设计了RTTI相关函数接口及实现
+ RTTI增加Invoke函数,支持通过Json支持调用相关函数
【注】 RTTI相关函数不支持早期的Delphi版本
此帖子包含附件:chineseswish_201462282343.zip 大小:219.9K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 bdl1 (bdl1) ▲▲▲△△ -
注册会员
2014/6/22 9:13:05
74楼: 太强大了!
----------------------------------------------
-我的新浪博客
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/6/24 15:07:20
75楼: * 修正了新版在2010下无法编译的问题
此帖子包含附件:chineseswish_201462415720.zip 大小:50.1K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chc2882004 (salman) ▲▲▲▲△ -
注册会员
2014/6/24 20:21:16
76楼: mark
----------------------------------------------
QQ 2697670447
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2014/6/24 20:36:47
77楼: 请教楼主一个问题,D7自带的XML功能很好用,但是我没找到,到底是哪里在进行基础parser的功能呢?我所看到的都是XML的使用接口。
----------------------------------------------
只有偏执狂才能生存!
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/6/25 9:06:15
78楼: @77楼 nervergrief
==========
我没有细研究,它本质上是调用的MSXML,查找下MSXML的帮助吧
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/6/26 8:53:30
79楼: 2014-6-26
========
* 修正了ToRtti.ToRecord子函数处理日期类型时的错误(感谢群友飞鸿大量的RTTI建议和测试)
+ Encode编码时,加入了ADoEscape参数来决定是否转义中文内容
此帖子包含附件:chineseswish_201462685330.zip 大小:50.2K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/7/1 19:21:07
80楼: 2014-7-1
========
* 修正了AsString属性的行为,在内容为空值时的行为,改为返回空字符串
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/7/7 10:08:23
81楼: 2014.7.6
  =========
  + ToRtti加入对静态数组类型的支持
  * 修正了Assign时复制了当前结点名称的问题
此帖子包含附件:chineseswish_20147710753.zip 大小:178.2K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/7/16 9:41:37
82楼: 2014.7.16
  =========
  * 修正了GetPath时,未初始化结果字符串造成Path属性可能出错的问题(音儿小白报告)
此帖子包含附件:chineseswish_201471694137.zip 大小:179.0K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 dunken (dunken) ★☆☆☆☆ -
盒子活跃会员
2014/7/18 8:45:57
83楼:
----------------------------------------------
-
作者:
女 hecongzhen (令狐**) ▲▲▲▲▲ -
普通会员
2014/7/18 16:22:11
84楼: 技术贴 mark一下
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/7/28 9:41:07
85楼: 2014.7.28
  =========
  * 修正了ToRtti如果源类型是日期时间类型,而JSON为null时解析出错的问题(恢宏报告)
  * 修改ToRecord参数类型为var,而不是const(恢宏报告)

源码请直接SVN吧
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/7/31 9:11:22
86楼: 2014.7.31
  =========
  * 修正了解析出错时,如果行过长,系统异常无法完整显示的问题(音儿小白报告)
  * 修正了解析时可能陷入死循环的问题(音儿小白报告)
  * 修正了出现异常时,异常行提示重复的问题
此帖子包含附件:chineseswish_201473191121.zip 大小:492.3K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/8/15 11:26:40
87楼: 2014-8-15
=========
* 修正了Add函数自动检测内容类型时,添加特定格式如11,23时解析出错的问题(Tuesday报告)
* 清理了Hint和Warning

新版源码请在SVN下载
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/8/27 19:06:17
88楼: 2014.8.27
  =========
  * 修正了解析数组或对象结束符前有行注释时出错的问题(阿木报告)

最新版下载请到QDAC官方网站:http://www.qdac.cc/?page_id=139
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/9/11 16:14:30
89楼: 2014-9-11
========
* QString修正了LoadTextA/LoadTextW加载带有BOM头的空的Utf8流时出错的问题
* QJSON修正了从流或文件中加载空白JSON数组和对象时出错的问题(恢弘报告)
* QJSON修改直接将非对象或数组值保存到流中的策略(麦子仲肥报告):
  1、如果JSON结点的名称已经指定,则保存为对象的一个子对象;
  2、如果未指定名称,且类型为未知或为jdtNull,则不保存任何内容
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/10/30 10:37:37
90楼: 2014-10-30
==========
+ 增加Remove、Detach、AttachTo、MoveTo函数及允许重命名

更新详细信息:http://www.qdac.cc/?p=1052
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 bdl1 (bdl1) ▲▲▲△△ -
注册会员
2014/10/30 12:32:08
91楼: 太强了!
----------------------------------------------
-我的新浪博客
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/10/30 19:28:50
92楼: 2014.10.30
==========
* 修正了移动节点时未检查自己是否是目标的父结点问题

更新详情:http://www.qdac.cc/?p=1069
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 linzhenqun (colin_you) ▲▲▲▲△ -
注册会员
2014/10/31 9:36:38
93楼: 顶楼主,不知楼主有没有和C++实现的一些JSON解析器作过性能比较呢,像RapidJson的速度非常的快,下面是他的一个BenchMark:
https://code.google.com/p/rapidjson/wiki/Performance

楼主能不能根据这个用QJson作一些性能比较呢
----------------------------------------------
-colin and yoyo
http://blog.csdn.net/linzhengqun
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/10/31 9:56:02
94楼: 没有对比过C++的,你可以编译对比下。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 linzhenqun (colin_you) ▲▲▲▲△ -
注册会员
2014/10/31 9:57:26
95楼: 嗯,我找个时间,按RapidJson的BenchMark对比一下。希望你这个越搞越好
----------------------------------------------
-colin and yoyo
http://blog.csdn.net/linzhengqun
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/10/31 10:53:59
96楼: 我刚才简单加载了QJson示例目录下的性能测试文件(Preferences.txt,文件大小9.81MB),QJson用时32位下是78ms,64位是94ms,RapidJson用时是140ms(64位,Release模式下,需要修改一处头文件定义,32位下Borland C++编译器无法编译RapidJson,Debug模式下是250ms),其它的性能测试你再详细测试对比下。
详细的测试过程及代码放到了QDAC官网上了:http://www.qdac.cc/?p=1074
此帖子包含附件:
JPEG 图像
大小:96.4K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 pengmg (Challey) ★☆☆☆☆ -
普通会员
2014/11/1 6:49:36
97楼: 这个要顶起来
----------------------------------------------
-
作者:
男 linzhenqun (colin_you) ▲▲▲▲△ -
注册会员
2014/11/4 0:13:37
98楼: 这两天有些事情,没有时间进行测试,刚才测试了一下,数据上和楼主有些差别,我先贴我的测试代码:
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <assert.h>
#include <windows.h>
#include "stdafx.h"
#include "rapidjson/document.h"      // rapidjson's DOM-style API  
using namespace rapidjson;
using namespace std;

char* loadFromFile(const char *filePath) {
  long size = 0;
  FILE *fp = fopen(filePath, "rb");
  fseek(fp,0,SEEK_END);
  size = ftell(fp);
  fseek(fp,0,SEEK_SET);
  char* p =(char*)malloc(size+1);
  fread(p, 1, size, fp);
  p[size] = '\0';
  fclose(fp);
  return p;
}

int _tmain(int argc, _TCHAR* argv[])
{
  unsigned long tick = ::GetTickCount();
  char *jsonstr = loadFromFile("c:\\Users\\Administrator\\Desktop\\code\\CppTest\\Debug\\Preferences.txt");
  rapidjson::Document d;
  d.Parse<0>(jsonstr);
  size_t errOffset = d.GetErrorOffset();
  assert(!d.HasParseError());
  tick = ::GetTickCount() - tick;
  printf("time=%d ms", tick);
  free(jsonstr);
  return 0;   
}

测试环境:
VS 2012 32位程序 release版:time=47 ms
Delphi 2007 32位程序::QJson=499 ms

Delphi版我用的是演示的函数:LoadTest:
测试结果:QJson=499ms,lkJson=562ms,SuperObject=1279ms,YJson=624ms,T1/T2=0.89,T1/T3=0.39,T1/T4=0.8

之所以会出现这么差异,我分析是以下几个:
1. Delphi版本过低,如果用XE6可能会好一点。
2. 楼主的C++用的是Borland C++,此编译器恐怕和VS 2012的优化能力有一定的差距。
3. 楼主的C++测试代码中用到了转Utf-8的代码,这里可能也有一定的性能消耗,且不是RapidJson的消耗
----------------------------------------------
-colin and yoyo
http://blog.csdn.net/linzhengqun
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/11/4 9:02:39
99楼: 2007下,QString给映射到WideString了,性能会差很多。QJson真正的性能在2009以后才能体现,如果是2007以前的版本,推荐用音儿小白改的YxdJson,它基于QJson的算法,按2007的AnsiString字符串实现的,速度明显强大不少。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/11/4 10:08:19
100楼: Preferences.txt是qjson自带的,约10M吧,我在xe7上测了,qjson是78毫秒,superObject也差不多
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/11/6 16:58:06
101楼: 2014.11.6
  ==========
  * 修正了FromRtti时集合类型元素添加结点时,AName误写成Name造成结点未命名的问题(阿木报告)
  + 新增IntByPath,IntByName,BoolByPath,BoolByName,FloatByPath,FloatByName,DateTimeByPath,
    DateTimeByName函数,以简化判断编程(FreeSpace8建议)
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/11/10 14:09:06
102楼: 2014.11.10
  ==========
  * 修正了FromRtti/ToRtti在处理TCollection类型时存在的问题(阿木)

更新详情:http://www.qdac.cc/?p=1200
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/11/10 17:36:38
103楼: qjson里的过程
procedure ToObject;
这行代码的AChild没初始化
(AObj as TStrings).Text := AChild.AsString
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/11/10 19:56:14
104楼: 感谢 hq200306 报告此问题,新版已经修正
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/11/20 17:06:30
105楼: 2014.11.20
  ==========
  + 加入AsBytes属性,以支持二进制数据类型,默认实现直接使用的十六进制字符串表达,上层可以重载OnQJsonEncodeBytes和OnQJsonDecodeBytes事件来替换为自己的实现(如ZLib+Base64)
  + 加入ValueFromStream/ValueFromFile/StreamFromValue/StreamFromFile函数

更新详情:http://www.qdac.cc/?p=1297
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/11/20 18:15:01
106楼: 刚下qdac3-code-170.zip,在xe7下,测了下AJson.Parse处理速度,十几个节点,循环20万次,处理速度比6月时的版本慢10%-20%,原来比superobject快10%-20%,现在相差无几
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/11/20 20:24:14
107楼: 我重新测试了下,qjson没问题,两个项目的编译选项“Release”和“Debug”引起的,不好意思
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/11/21 8:56:40
108楼: :)
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/11/26 17:02:36
109楼: 2014.11.25
  ==========
  * 修改了ItemByPath的代码,支持按索引顺序来访问jdtObject类型的子成员

  2014.11.24
  ==========
  * 修正了ToRtti.FoArray的行为,在子类型名字未找到时,提示异常
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/12/8 11:24:43
110楼: 2014.12.5
=========
 * 修正了由于QString.ParseNumeric函数引入的负的浮点数解析错误,建议立即更新
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/12/13 12:58:17
111楼: 2014.12.13
==========
 + 新增HasChild函数来判定指定路径的子结点是否存在(阿木建议),如果存在,则直接返回True及相应的子结点地址

更新详细信息请访问官网查看。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 kylix2008 (kylix2008) ★☆☆☆☆ -
普通会员
2014/12/23 21:44:42
112楼:      { "title": "企业所得税月(季)度预缴纳税申报表(A类)",  
    "subtitle":"",
    "sqlfile":"qysdsyjdyjnssbb_a", 
    "notefile": "",  
    "notetext":"最近一季度申报数据",
    "yxbz" :"Y",  
    "datafrequency":"JiDu1"   //每季度的第1月
    }

因为属性值后有注释“//每季度的第1月”,QJson解析出错,去掉注释就正常。
但SuperJson解析不会出错。
建议QJson加强对注释的支持。 
建议支持//、  /* */ 、 { }等形式的注释,注释可为单独一行或数行,也可在某个属性值后面。
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/12/24 14:15:24
113楼: @112楼
======
此问题已解决,请更新QJson到最新2014-12-24日版本。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2014/12/24 14:39:29
114楼: 014.12.24
  ==========
  * 修正了解析Json中包含注释时,处理不够全面的问题(kylix2008报告)
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/1/3 21:06:37
115楼: 2015.1.3
=========
  * SaveToStream/SaveToFile 增加了一个ADoFormat参数,以便控制是否格式化(恢弘、阿木建议)
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 tintin1943 (零输好) ★☆☆☆☆ -
盒子活跃会员
2015/1/3 23:29:08
116楼: 新年第一个上榜!
----------------------------------------------
不喧哗 自有声 心静 思远 志行千里
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/1/4 10:11:08
117楼: 2015.1.4
  =========
  * 修改了 ItemByName 的部分代码,修正了没有正确处理 JsonCaseSensitive 标记的问题,造成忽略大小写无效的问题(阿木)
  * 修正了 ItemByName 对数组下标处理的逻辑错误
  * 修正了 ItemByPath 不支持多维数组的问题

更新详情:http://blog.qdac.cc/?p=1665
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/1/5 11:35:00
118楼: 2015.1.5
  =========
  * 修正了IsChildOf的一处判断错误,造成可能发生AV异常
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/1/13 9:22:15
119楼: 2015.1.13
  ==========
  * 修正了 TQHashedJson 的 IndexOf 未正确处理大小写的问题
  * 修正了 TQHashedJson 在解析完成后未正确重新计算哈希值的问题(阿木报告)

更新详情:http://blog.qdac.cc/?p=1720
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/1/13 22:33:04
120楼: * 修正了解析名称后包含空格时名称也被解析到名称中的问题
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2015/1/13 22:43:57
121楼: 楼主有神人!这么大精力,估计有三头六臂吧,同时弄这么多项目
----------------------------------------------
-
作者:
男 pengmg (Challey) ★☆☆☆☆ -
普通会员
2015/1/13 23:06:41
122楼: 顶一下
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/1/15 9:38:39
123楼: @121楼 hq200306
==========
实际上都隶属于 QDAC 项目,只是这个子组件而已
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/1/26 17:26:57
124楼: 2015.1.26
=========
+ 增加了 Delete 函数的一个无参数重载用于删除结点自身
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/2/2 10:12:13
125楼: 2015.2.2
========
* 修改了解析和编码的行为,兼容名称为空字符串的JSON代码(感谢 Synopse 开发组)

更新详情:http://blog.qdac.cc/?p=1926
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 ezhimeng (HUI) ▲▲▲▲△ -
注册会员
2015/2/5 13:34:29
126楼: 楼主生猛!CB能用不?
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/2/5 14:10:38
127楼: 当然可以用
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 adamwu (AdamWu) ▲▲▲▲△ -
注册会员
2015/2/17 2:23:05
128楼: 这...Synopse的性能比较结果反差太大了吧.
(QJSON) is 8 times slower, and using 7 times more memory.
是否因为测试的数据或者方法不一样?

另外,Andy大神也加入潮流了,推出了自己的JSON Parser
http://andy.jgknet.de/blog/2015/02/json-parser-jsondataobjects-is-now-on-github/
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/4/1 14:05:05
129楼: 2015.4.1
=======
* 修正了由于 TQStringCatHelperW.Cat 函数在连接字符串时,计算需要的内存缓冲区大小不正确的问题(etarelecca 报告)

更新详情:http://blog.qdac.cc/?p=2209
请QXML、QJson、QMsgPack、QLog、QWorker用户更新
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 tuesdays (Tuesday) ▲▲△△△ -
注册会员
2015/4/1 18:46:59
130楼: 没看到在哪下载...
----------------------------------------------
delphi界我写php最强, php界我写delphi最强. 
写自己的代码, 让别人去运行吧.
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/4/8 14:51:24
131楼: 2015.4.8
=========
* 修正了ParseNumeric 在解析 -0.xx 这样的数字符号出错的问题(感谢YZ报告)

更新详情:http://blog.qdac.cc/?p=2264

请QXML、QJson、QMsgPack 用户立即更新
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 whx8888 (whx8888) ▲▲▲▲△ -
注册会员
2015/5/6 18:38:32
132楼: 那位高人帮我做个DEMO ,手机端提交JSON数据(主要是查询操作的语句)到服务器,然后服务器处理完成后(数据库查询的结果)再发给手机显示,JSON的转换搞得头都大了,没人指点,不知道如何下手,(XE7 +  安卓)
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/10/12 10:34:31
133楼: 2015.10.8
  ==========
  * 修正了名称末尾包含空格时错误的自动移除的问题
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/10/12 10:36:44
134楼: @whx8888
========
 这个自己做下吧,相信这么长时间你应该早搞定了
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/10/20 21:54:49
135楼: 2015.10.20
【更新说明】
+ 增加函数 Sort 来支持对子结点排序

+ 增加 RevertOrder 反转子结点顺序

+ 增加 ExchangeOrder 交互子结点顺序

+ 增加 ContainsName 判断子结点中是否有指定名称的子结点

+ 增加 ContainsValue 判断子结点中是否有指定值的子结点

+ 增加 Exists 函数来判断是否存在指定类型的子结点

【更新级别】
可选

【特别感谢】
阿木、恢弘、青春
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2015/11/19 8:56:16
136楼: 2015.11.19
==========
* 修正了TQHashedJson添加结点时,没有正确对名称进行哈希的问题(QQ报告)
* 修正了 FromRtti 在 Win64 时,如果没有子属性时出错的问题
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2016/1/13 8:49:01
137楼: 2016.1.12
=========
+ 增加了 Equals 函数来判断两个 JSON 的内容是否一致
+ 增加了 Merge 函数来合并两个 JSON 的内容
+ 增加了 Intersect 函数求两个 JSON 的相同元素
+ 增加了 Diff 函数求两个 JSON 的差异元素
+ 增加了 CommentStyle 和 Comment 属性来管理 JSON 中的注释,通过设置 CommentStyle 为 jcsBeforeName 或 jcsAfterValue 可以保存注释到 JSON中。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 smartdata (smartdata) ★☆☆☆☆ -
普通会员
2016/1/13 11:12:09
138楼: 帮顶!
----------------------------------------------
==========
作者:
男 wk_knife (wk_knife) ★☆☆☆☆ -
盒子活跃会员
2016/1/13 16:52:05
139楼: 在网站下了个JSONView,然后发现了个问题哈......差点把我晕死了。
看附件的箭头标的两个数字
此帖子包含附件:
PNG 图像
大小:113.0K
----------------------------------------------
-
作者:
男 wk_knife (wk_knife) ★☆☆☆☆ -
盒子活跃会员
2016/1/13 16:58:13
140楼: 原始的数据也发给你,负值用你的这个view工具打开有问题,其他的负值也有,随机的。
用Delphi原生的没有问题。
此帖子包含附件:wk_knife_2016113165850.txt 大小:2,571B
----------------------------------------------
-
作者:
男 wk_knife (wk_knife) ★☆☆☆☆ -
盒子活跃会员
2016/1/13 17:06:06
141楼: 看了一下两个数的尾数加起来正好等于1,好好检查下吧。
----------------------------------------------
-
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2016/1/16 9:29:08
142楼: @141 楼 wk_knife
==========
这个问题已经于 2015.4.8 修复,官网上的JsonView忘记更新了,更新详情请参考:http://blog.qdac.cc/?p=2264。你用 MsgPackView打开会发现一切正常。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 zyp1984 (小李他妈的飞刀) ★☆☆☆☆ -
普通会员
2016/4/7 14:06:25
143楼: 顶一下....
----------------------------------------------
山外青山楼外楼,能人背后有能人弄..
作者:
男 chineseswish (swish) ▲▲▲▲▲ -
普通会员
2016/6/24 22:36:22
144楼: 2016.6.24
==========
* 修正了由于 JsonCat 函数在计算需要的内存空间时,考虑不周造成的,造成内存可能访问越界的问题,推荐更新。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc ;讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 ybj316 (ybj) ★☆☆☆☆ -
盒子活跃会员
2019/1/27 21:31:14
145楼: @chineseswish  请问Delphi7下可用吗?
----------------------------------------------
-
作者:
男 zyp1984 (小李他妈的飞刀) ★☆☆☆☆ -
普通会员
2019/1/28 1:00:43
146楼: 楼上的不支持D7. 我要说的是"的英顶"
----------------------------------------------
山外青山楼外楼,能人背后有能人弄..
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行203.125毫秒 RSS