PROGRESS 4GL:如何读取JSON文件并将其存储到临时表中?
PROGRESS 4GL解析JSON并存储到临时表实现
步骤1:创建对应结构的临时表
先定义匹配JSON字段的临时表,用于存储解析后的数据:
DEFINE TEMP-TABLE tt_DocumentData FIELD sdion AS CHARACTER FIELD Count AS INTEGER FIELD ddoid AS CHARACTER FIELD submiss AS CHARACTER INDEX idx_ddoid IS PRIMARY UNIQUE ddoid.
步骤2:编写JSON解析与存储代码
以下是完整的解析逻辑,包含JSON读取、字段提取、临时表插入操作:
/* 定义变量 */ DEFINE VARIABLE cJsonData AS CHARACTER NO-UNDO. DEFINE VARIABLE hJsonObj AS HANDLE NO-UNDO. DEFINE VARIABLE hJsonArray AS HANDLE NO-UNDO. DEFINE VARIABLE iArrayIndex AS INTEGER NO-UNDO. DEFINE VARIABLE cSdion AS CHARACTER NO-UNDO. DEFINE VARIABLE iCount AS INTEGER NO-UNDO. /* 加载JSON内容(实际场景可替换为从文件读取:cJsonData = FILE-INFO:FILE-CONTENTS WHERE FILE-INFO:FILE-NAME = "你的JSON文件路径") */ cJsonData = '{ "sdion": "VSSDG", "Count": 1, "documentSummary": [ { "ddoid": "SSFG11GFG", "submiss": "SSFG11GFG" } ] }'. /* 解析JSON为对象 */ CREATE JSON-OBJECT hJsonObj. hJsonObj:READ-JSON("STRING", cJsonData). /* 提取顶层字段值 */ cSdion = hJsonObj:GET-VALUE("sdion"). iCount = hJsonObj:GET-VALUE("Count"). /* 遍历documentSummary数组 */ hJsonArray = hJsonObj:GET-VALUE("documentSummary"). DO iArrayIndex = 1 TO hJsonArray:NUM-ENTRIES(): DEFINE VARIABLE hDocObj AS HANDLE NO-UNDO. hDocObj = hJsonArray:GET-ENTRY(iArrayIndex). /* 插入数据到临时表 */ CREATE tt_DocumentData. ASSIGN tt_DocumentData.sdion = cSdion tt_DocumentData.Count = iCount tt_DocumentData.ddoid = hDocObj:GET-VALUE("ddoid") tt_DocumentData.submiss = hDocObj:GET-VALUE("submiss"). DELETE OBJECT hDocObj. END. /* 清理JSON句柄,释放内存 */ DELETE OBJECT hJsonArray. DELETE OBJECT hJsonObj. /* 验证临时表数据 */ FOR EACH tt_DocumentData: DISPLAY tt_DocumentData. END.
关键要点
- 临时表设计:整合JSON顶层字段与数组内的字段,适配单个数组元素关联顶层数据的场景。
- JSON句柄操作:使用PROGRESS内置的
JSON-OBJECT和JSON-ARRAY句柄处理JSON结构,使用完毕必须删除句柄避免内存泄漏。 - 数组遍历:通过
NUM-ENTRIES()获取数组长度,循环提取每个数组元素的子字段。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

