QJSON更新-修正了ItemByName和ItemByPath的几处Bug

【问题描述】

1、ItemByName 函数的一个重载没有处理 JsonCaseSensitive 属性,造成 JsonCaseSensitive 为 False 时,可能得不到需要的结果的问题。注意此重载不支持按数组下标方式来获取列表,只支持按实际名称比较。

function ItemByName(const AName: QStringW; AList: TQJsonItemList;ANest: Boolean = False): Integer; overload;

2、ItemByName 函数的一个重载没有正确处理数组下标的问题。

function ItemByName(AName: QStringW): TQJson;

问题发生在数组下标的名称解析的逻辑设计上,原设计在取当前数组子结点时,包含数组结点的名称,而这显示不符合常规。如下面的 JSON 字符串:

{“a”:[1,2,3]}

如果按照原设计,如果我们已经通过 ItemByName 获得 a 对应的 TQJson 结点对象,则需要按下面的表达式来获取其第一个元素:

ANode.ItemByName('a[0]')

新的设计修正成:

ANode.ItemByName('[0]')

3、ItemByPath 函数没有正确处理多维数组下标的问题。

原设计考虑了一维数组的情况,没有考虑多维数组访问的问题,会造成找不到指定的结点。象下面的 JSON 字符串:

{“a”:[1,[2,3],4]}

如果使用ItemByPath来访问第2个元素的第一个子元素,正确的路径应为“a[1][0]”,但原设计会返回空,新设计修正了这一问题。

【更新级别】

推荐

【严重程度】

【特别感谢】

阿木

 

分享到: