OpenEdge ABL保留关键字作为临时表字段名(从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

我遇到了以下情况:

我的方法接收来自外部RESTAPI调用的响应。JSON响应结构如下所示:

{
"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
给出了相同的错误。