You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 10:12:06