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

如何使用Progress 4GL从嵌套JSON中获取JournalNum字段值

解决嵌套JSON中获取指定字段的问题

问题场景

需要从以下嵌套JSON中获取JournalNum字段的值(注:示例JSON中实际为Company字段,代码可按需替换字段名):

{"parameters":{"ds":{"GLJrnHed":[{"Company":"EPIC06"}]}}}

原代码仅能处理非嵌套JSON结构,无法适配多层级场景,且不想通过read-json将全量数据转入临时表以节省开销。

解决方案

通过逐层调用JsonObject和JsonArray的API定位目标字段,无需全量解析:

DEFINE VARIABLE TJsonObject AS JsonObject NO-UNDO.
DEFINE VARIABLE TParamsObj AS JsonObject NO-UNDO.
DEFINE VARIABLE TDsObj AS JsonObject NO-UNDO.
DEFINE VARIABLE TGlJrnArray AS JsonArray NO-UNDO.
DEFINE VARIABLE TGlJrnObj AS JsonObject NO-UNDO.
DEFINE VARIABLE OP-JOURNAL-NUM AS INTEGER NO-UNDO.

// 转换根JSON对象
TJsonObject = CAST(oResponse:Entity, JsonObject).

// 逐层拆解嵌套结构
IF TJsonObject:Contains("parameters") THEN DO:
    TParamsObj = TJsonObject:GetJsonObject("parameters").
    IF TParamsObj:Contains("ds") THEN DO:
        TDsObj = TParamsObj:GetJsonObject("ds").
        IF TDsObj:Contains("GLJrnHed") THEN DO:
            TGlJrnArray = TDsObj:GetJsonArray("GLJrnHed").
            // 读取数组第一个元素(索引从0开始)
            IF TGlJrnArray:Length > 0 THEN DO:
                TGlJrnObj = CAST(TGlJrnArray:Get(0), JsonObject).
                // 获取目标字段值
                IF TGlJrnObj:Contains("JournalNum") THEN DO:
                    OP-JOURNAL-NUM = INTEGER(TGlJrnObj:GetJsonText("JournalNum")).
                END.
            END.
        END.
    END.
END.

说明

  • 每一步都加入Contains判断,避免因字段缺失引发运行时错误
  • 通过GetJsonObject和GetJsonArray逐层访问嵌套节点
  • 数组操作先判断长度,再读取指定位置元素;若需遍历所有数组元素,可添加循环逻辑处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:03:20