无法在JsonDataObject中用is测试TJsonArray/TJsonObject类型的问题
解决JsonDataObjects中类型判断失效的问题
直接判断元素本身的类型,而非
ObjectValue属性:
你的代码错误地使用了ObjectValue来做类型判断,实际上arrayValue[0]本身就是TJsonValue的子类实例(如果元素是数组或对象的话)。正确的判断方式是:if (arrayValue[0] is TJsonArray) or (arrayValue[0] is TJsonObject) then begin // 处理逻辑 end;或者通过
ValueType属性判断(更稳妥):
JsonDataObjects的TJsonValue提供了ValueType属性,可以直接判断当前值的类型:if (arrayValue[0].ValueType in [jvtArray, jvtObject]) then begin // 再根据具体类型处理 if arrayValue[0].ValueType = jvtArray then // 处理TJsonArray else if arrayValue[0].ValueType = jvtObject then // 处理TJsonObject end;
原因说明
在JsonDataObjects库中,ObjectValue属性是当TJsonValue的ValueType为jvtObject时,用来获取对应的TJsonObject实例;当ValueType为jvtArray时,ObjectValue虽会返回TJsonArray,但直接对ObjectValue做is判断可能因类型转换逻辑的问题失效。直接对arrayValue[0]本身做类型判断,或者使用ValueType属性,是更可靠的方式。
内容的提问来源于stack exchange,提问作者Hassan
相关产品推荐
相关产品推荐

