【问题描述】
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]”,但原设计会返回空,新设计修正了这一问题。
【更新级别】
推荐
【严重程度】
中
【特别感谢】
阿木