OpenEdge读取含extent属性的JSON数组元素报错求助
解决OpenEdge读取JSON数组元素的问题
错误原因
你调用GetJsonArray(2,1)的方式存在两个问题:
MonthQuota是数值类型数组,而非嵌套数组,GetJsonArray方法仅用于提取JSON中的子数组结构,不能用来获取单个数值元素;- 原代码中
myJsonObj1未定义,缺少从JsonConstruct获取根JsonObject的步骤,同时GetJsonArray("ttSalesRep")的键名与JSON中的SalesRep不匹配,导致后续逻辑无法正确定位目标对象。
修正方案
- 补充根对象获取逻辑,从解析后的
JsonConstruct中提取根JsonObject; - 将键名修正为JSON中实际存在的
SalesRep; - 先获取
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
相关产品推荐
相关产品推荐

