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

OpenEdge读取含extent属性的JSON数组元素报错求助

解决OpenEdge读取JSON数组元素的问题

错误原因

你调用GetJsonArray(2,1)的方式存在两个问题:

  • MonthQuota是数值类型数组,而非嵌套数组,GetJsonArray方法仅用于提取JSON中的子数组结构,不能用来获取单个数值元素;
  • 原代码中myJsonObj1未定义,缺少从JsonConstruct获取根JsonObject的步骤,同时GetJsonArray("ttSalesRep")的键名与JSON中的SalesRep不匹配,导致后续逻辑无法正确定位目标对象。

修正方案

  1. 补充根对象获取逻辑,从解析后的JsonConstruct中提取根JsonObject;
  2. 将键名修正为JSON中实际存在的SalesRep;
  3. 先获取MonthQuota对应的JsonArray对象,再用GetJsonNumber(index)读取指定位置的数值(OpenEdge的JSON数组索引从1开始,第二个元素对应索引2)。

修正后的完整代码

DEFINE VARIABLE myParser    AS ObjectModelParser NO-UNDO.
DEFINE VARIABLE myConstruct AS JsonConstruct     NO-UNDO.
DEFINE VARIABLE myJsonObj1  AS JsonObject        NO-UNDO.
DEFINE VARIABLE myJsonObj2  AS JsonObject        NO-UNDO.
DEFINE VARIABLE monthQuotaArr AS JsonArray       NO-UNDO.

myParser    = NEW ObjectModelParser( ).  
myConstruct = myParser:ParseFile("JsonRaro.json").  
myJsonObj1 = CAST(myConstruct:GetJsonObject(), JsonObject).
myJsonObj2 = CAST(myJsonObj1:GetJsonArray("SalesRep"):GetJsonObject(1), JsonObject).

monthQuotaArr = myJsonObj2:GetJsonArray("MonthQuota").

MESSAGE  
    "2 " STRING( myJsonObj2:GetJsonText("RepName") ) SKIP 
    "3 " STRING( myJsonObj2:GetJsonText("MonthQuota") ) SKIP 
    "3a " STRING( monthQuotaArr:GetJsonNumber(2) ) SKIP
VIEW-AS ALERT-BOX.

额外说明

  • 如果MonthQuota数组存在非数值元素,可改用GetJsonValue(2)获取元素后再转换类型,但针对当前明确的数值数组场景,GetJsonNumber更高效直接;
  • 确保JSON文件路径正确,且OpenEdge版本支持ObjectModelParser相关API(需OpenEdge 11.6及以上版本)。

内容的提问来源于stack exchange,提问作者SSosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:22:52