OpenEdge ABL保留关键字作为临时表字段名(从JSON数据推断)
我遇到了以下情况: 我的方法接收来自外部RESTAPI调用的响应。JSON响应结构如下所示:OpenEdge ABL保留关键字作为临时表字段名(从JSON数据推断),json,openedge,progress-4gl,Json,Openedge,Progress 4gl,我遇到了以下情况: 我的方法接收来自外部RESTAPI调用的响应。JSON响应结构如下所示: { "members": [ { "email_address": "random@address.org", "status": "randomstatus" }, ...etc... ]} 我正在用READ-JSON(从JSON数据推断ABL模式)将其读入临时表,并尝试处理临时表。这就是我被困的地方: 当我试图组合一个包含临时表字段“sta
{
"members": [
{
"email_address": "random@address.org",
"status": "randomstatus"
},
...etc...
]}
我正在用READ-JSON(从JSON数据推断ABL模式)将其读入临时表,并尝试处理临时表。这就是我被困的地方:
当我试图组合一个包含临时表字段“status”的查询时,会出现错误。
例如:
给出:
**无法理解--“成员位置”之后的内容。(247)
我也尝试过直接按名称引用,同样的结果
可能“status”是ABL中的保留关键字。可能是这样吗?我怎样才能克服这个问题来引用“状态”字段
不幸的是,JSON响应的格式和键名不在我的控制之下,我必须处理这些问题。大家都知道我会做这样愚蠢的事情:
JSONData = replace( JSONData, '"status":', '"xstatus":' ).
大家都知道我会做这样的傻事:
JSONData = replace( JSONData, '"status":', '"xstatus":' ).
您可以在临时表定义中使用
SERIALIZE-NAME
,对相关字段进行内部重命名。然后,您必须使用另一个名称引用该字段,但在其序列化形式中,该字段仍然称为状态
下面是一个示例,status
-字段被重命名为exampleStatus
DEFINE TEMP-TABLE ttExample NO-UNDO
FIELD exampleStatus AS CHARACTER SERIALIZE-NAME "status".
/* Code to read json goes here... */
/* Access the field */
FOR EACH ttExample:
DISPLAY ttExample.exampleStatus.
END.
您可以在临时表定义中使用
SERIALIZE-NAME
,对相关字段进行内部重命名。然后,您必须使用另一个名称引用该字段,但在其序列化形式中,该字段仍然称为状态
下面是一个示例,status
-字段被重命名为exampleStatus
DEFINE TEMP-TABLE ttExample NO-UNDO
FIELD exampleStatus AS CHARACTER SERIALIZE-NAME "status".
/* Code to read json goes here... */
/* Access the field */
FOR EACH ttExample:
DISPLAY ttExample.exampleStatus.
END.
尝试命名临时表(硬编码或通过字符串附加)+'.+hBuffer:BUFFER-FIELD(iStatus):NAME(…)
它应该有助于编译器理解您所说的字段。由于不受限制,这将强制其手动操作并允许您进行查询。尝试命名临时表(硬编码或通过字符串附加)+'.+hBuffer:BUFFER-FIELD(iStatus):NAME(…)
它应该有助于编译器理解您所说的字段。由于它没有限制,这应该强制它的手并允许您进行查询。您确定您的缓冲区值正确吗?当我在动态查询中有“状态”时,我不会得到那个错误。可能是httSubscriber:NAME和/或hBuffer:FIELD-VALUE(iStatus):NAME没有返回您认为正确的值。您确定缓冲区值正确吗?当我在动态查询中有“状态”时,我不会得到那个错误。可能是httSubscriber:NAME和/或hBuffer:FIELD-VALUE(iStatus):NAME没有返回您认为是的值。不幸的是,这在我的情况下不起作用<代码>(…)httSubscriber:NAME+'.+hBuffer:BUFFER-FIELD(iStatus):NAME(…),其计算结果为
成员。status
给出了相同的错误。不幸的是,这在我的情况下不起作用<代码>(…)httSubscriber:NAME+'.+hBuffer:BUFFER-FIELD(iStatus):NAME(…)计算结果为成员。status
给出了相同的错误。