OpenEdge ABL保留关键字作为临时表字段名称(从JSON数据推断)

时间:2017-07-31 13:11:45

标签: json openedge progress-4gl

我遇到以下情况:

我的方法从外部REST API调用接收响应。 JSON响应结构如下:

{
"members": [
    {
        "email_address": "random@address.org",
        "status": "randomstatus"
    },
    ...etc... 
]}

我正在使用READ-JSON(从JSON数据中推断ABL模式)将其读入temp-table并尝试处理临时表。这就是我被困的地方: 当我尝试将包含临时表字段“status”的查询放在一起时,会引发错误。 例如:

hQuery:QUERY-PREPARE('FOR EACH ' + httSubscriber:NAME + ' WHERE ' + hBuffer:BUFFER-FIELD(iStatus):NAME + ' = "randomstatus"').

给出:

  

**之后无法理解 - “成员在哪里”。(247)

我也尝试过直接按名称引用,结果相同。

“status”可能是ABL中的保留关键字。可能是这样吗?我如何克服这个问题来引用“status”字段?

不幸的是,JSON响应的格式和密钥名称不在我的控制之下,我必须使用它。

3 个答案:

答案 0 :(得分:3)

您可以在临时表定义中使用SERIALIZE-NAME在内部重命名相关字段。然后你必须用另一个名称来引用该字段,但是在它的序列化形式中它仍然被称为status

以下是将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.

答案 1 :(得分:1)

我知道做这样愚蠢的事情:

JSONData = replace( JSONData, '"status":', '"xstatus":' ).

答案 2 :(得分:0)

尝试命名临时表(硬编码或通过字符串附加)+'。' + hBuffer:BUFFER-FIELD(iStatus):NAME(...)

它应该有助于编译器理解你在谈论这个领域。由于它没有受到限制,因此应强制其手并允许您查询。