OpenEdge ABL中READ-JSON读取JSON到临时表无输出,需定义所有节点吗?
OpenEdge ABL JSON解析后EXPORT无输出问题排查
不需要定义JSON返回中的所有节点才能让EXPORT STREAM dOut1产生输出。无输出的原因大概率和节点定义无关,建议从以下几个方向排查:
检查流的初始化与输出目标
确保你已经正确声明并指定了输出流的目标文件:DEFINE STREAM dOut1. OUTPUT STREAM dOut1 TO "你的输出文件路径.txt" /* 确认路径有读写权限,路径是否正确 */.另外,程序结束前记得关闭流,否则缓冲区内容可能无法写入文件:
OUTPUT STREAM dOut1 CLOSE.验证JSON解析是否成功
先确认你拿到的JSON数据已经被正确解析为JsonObject对象。可以通过以下方式验证:/* 假设oJson是你的JsonObject实例 */ MESSAGE "节点总数: " + STRING(oJson:Count) VIEW-AS ALERT-BOX. MESSAGE "是否包含Origin节点: " + STRING(oJson:Contains("Origin")) VIEW-AS ALERT-BOX.如果解析失败(比如JSON格式错误、字符串为空),后续的输出自然没有内容。
检查EXPORT语句的有效性
确认EXPORT语句的语法正确,且输出的内容不为空。比如如果你要输出某个节点的值,先确保该节点存在且有值:IF oJson:Contains("URL") THEN EXPORT STREAM dOut1 "请求URL: " + oJson:GetString("URL").避免直接输出不存在的节点,否则可能抛出异常导致后续代码执行中断。
排查异常与错误
用错误捕获块包裹解析和输出逻辑,查看是否有未处理的异常:DO ON ERROR UNDO, THROW: /* 你的JSON解析和EXPORT代码 */ END.异常可能会中断程序执行,导致输出流没机会写入内容。
示例代码(仅解析输出部分节点)
DEFINE STREAM dOut1. DEFINE VARIABLE oJson AS JsonObject NO-UNDO. DEFINE VARIABLE cJsonResp AS CHARACTER NO-UNDO. /* 模拟HTTP返回的JSON字符串 */ cJsonResp = '{ "Args": {}, "Data": "", "Origin": "192.168.1.1", "URL": "https://example.com/test" }'. oJson = NEW JsonObject(cJsonResp). OUTPUT STREAM dOut1 TO "output.txt". /* 只输出需要的Origin和URL节点,无需定义所有节点 */ IF oJson:Contains("Origin") THEN EXPORT STREAM dOut1 "Origin: " + oJson:GetString("Origin"). IF oJson:Contains("URL") THEN EXPORT STREAM dOut1 "URL: " + oJson:GetString("URL"). OUTPUT STREAM dOut1 CLOSE. DELETE OBJECT oJson.
内容的提问来源于stack exchange,提问作者BobNoobGuy
相关产品推荐
相关产品推荐

