【问题描述】 该问题是由于解析浮点数字时,直接使用 ParseInt 解析浮点数的整数部分,因此在解析 -0.xxx 这种浮点数据时,会出现错误的解析结果。 【更新级别】 立即 【严重程度】 高 【特别感谢】 YZ
分类: QJSON
重要更新 – 请 QXML、QJson、QMsgPack、QLog、QWorker 用户更新
【问题描述】 该问题是由于 TQStringCatHelperW.Cat 函数在连接字符串时,计算需要的内存缓冲区大小不正确,可能造成构造较长的结果字符串时结果不正确,甚至可能出现 Access Volition 错误。问题发生在下面两个函数: function TQStringCatHelperW.Cat(p: PQ
QJson 更新 – 修正了 AsInteger/AsInt64/AsFloat 不兼容十六进制字符串的问题
【问题描述】 下面的 JSON 字符串: { “color”:”$FF0000″ } 如果对 color 使用 AsInteger / AsInt64 / AsFloat 访问时,会提示不是有效的数字。 【严重程度】 中 【更新级别】 可选 【特别感谢】 阿木
QJSON 更新 – 修正了 JSON 结点名称为空字符串时,无法解析的问题
【问题描述】 JSON 标准中,允许结点的名称为任意数量的Unicode字符,俺没理解上去,限制了名称长度不为0,改过来。 【更新级别】 可选 【严重程度】 中 【特别感谢】 Synopse 的作者在其博客上的反馈
QJson 更新 – 增加了 Delete 函数的一个无参数重载用于删除结点自身
【更新说明】 增加了 Delete 函数的一个无参数重载用于删除结点自身,如果当前结点是根结点,则释放自身。 【更新级别】 可选 【特别感谢】 阿木
QJson更新 – 修正了解析名称后包含空格时名称也被解析到名称中的问题
【问题描述】 该问题是由于 ParseName 时,没有移除右侧空格造成的。新代码在 ParseName 时加入了移除右侧空白以解决该问题。 【严重程度】 高 【更新级别】 建议 【特别感谢】 阿木
QJson 更新-修正了 TQHashedJson 的两处Bug
【问题描述】 1、在调用 Parse 来解析一个 Json 封包的数据块时,没有正确的更新结点的哈希值,造成 Parse 后明明有的结点,用 ItemByName、IndexOf 等函数检索时,无法得到对应的结果。 2、在调用 IndexOf 等函数在忽略大小写时,由于没有正确处理,造成忽略大小写选项无效。 【严重程度
QJSON 更新 – 修正了 IsChildOf 函数的一处错误
【问题描述】 该问题是由于 IsChildOf 函数第一句 if Assigned(FParent) then 中,FParent 错误的写成了 AParent 引起,可能会造成 Access Volation 异常。 【严重程度】 中 【更新级别】 推荐
QJSON更新-修正了ItemByName和ItemByPath的几处Bug
【问题描述】 1、ItemByName 函数的一个重载没有处理 JsonCaseSensitive 属性,造成 JsonCaseSensitive 为 False 时,可能得不到需要的结果的问题。注意此重载不支持按数组下标方式来获取列表,只支持按实际名称比较。 function ItemByName(const ANa
QJson更新-SaveToStream/SaveToFile增加ADoFormat参数决定是否格式化结果
【更新说明】 原来的 SaveToStream 和 SaveToFile 默认保存成数据流或文件时,会加入换行及缩进等控制字符,以便于阅读。考虑到网络传输,新增一个ADoFormat参数来控制此项开关,默认值为True,保持和原来一致。 【更新级别】 可选 【特别感谢】 恢弘、阿木
QJson更新-修正了在StrictJson为False时,解析包含//和/**/注释的内容时仍出错的问题
【问题描述】 此问题是由于 QJson 对注释位置的出现考虑不全面造成的,象解析下面的Json代码时会出错。 { “A”:”B”// 这是注释 } 新版 QJson 修正了这一问题并使用下面的测试用例进行了测试: //This is demo {//Json Start “A”/*Name*/:/*Value Star
QJson更新-新增HasChild函数简化编程
【更新说明】 HasChild函数用于判定当前结点下,是否存在指定路径的子结点,如果存在,则返回True,同时,通过AChild参数返回找到的子结点,如果失败,则返回False,等价于下面的代码: [Delphi] AChild:=AJson.ItemByPath(APath); if AChild<>ni
QJson更新-修正了由于QString.ParseNumeric错误引入的错误
【问题描述】 该问题是由于QString.ParseNumeric函数在解析负数时,未进行检测造成解析的结果与字符串表达式结果不一致造成的。问题出在QString.pas的ParseNumeric.ParseDec函数: if ACount > 0 then ANum := ANum + iVal / IntPo
[转]封三郎-利用QJSON将FDQuery转成JSON串
服务器要支持Http协议,打算采用Http+JSON的方式来交换数据。一开始考虑使用superobject,因为以前使用比较多,比较熟悉。 代码如下: class function FDQueryToSJSON(aQuery : TFDQuery) : string; class function TFDQueryJS
示例-QJson中结点的查找与遍历方法小结
1、查找结点 QJson提供了一组函数来查找某一个结点,我们在下面来分别看一下: function ItemByName(AName: QStringW): TQJson; overload; function ItemByName(const AName: QStringW; AList: TQJsonItemLis
QJson示例-向QJson实例中添加子结点的方法小结
QJson中添加结点主要有以下3种方式: 1、用Add函数 如我们要添加一个字符串类型的子结点: var AJson:TQJson; begin AJson:=TQJson.Create; AJson.Add(‘Name’).AsString:=’Jony smith’; … FreeAndNil(AJson);
QJson更新-修改了ToRtti.ToArray的代码,在未找到类型信息时抛出更明确提示
【更新内容】 修改了ToRtti.ToArray的行为,加入数组子类型的检测,并在找不到子类型时,给出更明确的提示,告知如何解决这一问题。 【更新级别】 可选 【特别感谢】 志文2014
QJson/QMsgPack RTTI 注意事项
在Delphi截止XE7的实现中,RTTI信息也并不是特别完美,所以在特定的情况下是无法获取到相应的RTTI信息,目前已知: 1、在implementation中的声明没有RTTI信息,所以你要使用ToRtti/FromRtti/ToRecord/FromRecord等函数,你必需保证用到的类型声明的interface
QJSON更新-增加AsBytes属性及几个辅助函数
【更新内容】 1、 加入AsBytes属性,以支持二进制数据类型,默认实现直接使用的十六进制字符串表达,上层可以重载OnQJsonEncodeBytes和OnQJsonDecodeBytes事件来替换为自己的实现(如ZLib+Base64) var ABytes:TBytes; AJson:TQJson; … AJ