OpenEdge ABL 保留关键字作为 temp-table 字段名称(从 JSON 数据推断)
OpenEdge ABL reserved keyword as temp-table field name (inferred from JSON data)
我遇到以下情况:
我的方法收到来自外部 REST API 调用的响应。 JSON 响应结构如下:
{
"members": [
{
"email_address": "random@address.org",
"status": "randomstatus"
},
...etc...
]}
我正在使用 READ-JSON(从 JSON 数据推断 ABL 模式)将此读到 temp-table,并尝试处理 temp-table。这就是我被困的地方:
当我尝试将包含 temp-table 字段 "status" 的查询放在一起时,出现错误。
示例:
hQuery:QUERY-PREPARE('FOR EACH ' + httSubscriber:NAME + ' WHERE ' + hBuffer:BUFFER-FIELD(iStatus):NAME + ' = "randomstatus"').
给出:
**Unable to understand after -- "members WHERE".(247)
我也试过直接按名字引用,结果一样。
可能 "status" 是 ABL 中的保留关键字。可能是这样吗?我怎样才能解决这个问题以引用 "status" 字段?
不幸的是,JSON 响应的格式和键名不在我的控制之下,我必须使用它。
众所周知,我会做这样的傻事:
JSONData = replace( JSONData, '"status":', '"xstatus":' ).
您可以在 temp-table 定义中使用 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.
尝试命名 temp-table(硬编码或通过字符串附加)+ '.' + hBuffer:BUFFER-FIELD(iStatus):NAME (...)
它应该可以帮助编译器理解您在谈论该字段。既然没有限制,这应该是强制其手,让你查询。
我遇到以下情况:
我的方法收到来自外部 REST API 调用的响应。 JSON 响应结构如下:
{
"members": [
{
"email_address": "random@address.org",
"status": "randomstatus"
},
...etc...
]}
我正在使用 READ-JSON(从 JSON 数据推断 ABL 模式)将此读到 temp-table,并尝试处理 temp-table。这就是我被困的地方: 当我尝试将包含 temp-table 字段 "status" 的查询放在一起时,出现错误。 示例:
hQuery:QUERY-PREPARE('FOR EACH ' + httSubscriber:NAME + ' WHERE ' + hBuffer:BUFFER-FIELD(iStatus):NAME + ' = "randomstatus"').
给出:
**Unable to understand after -- "members WHERE".(247)
我也试过直接按名字引用,结果一样。
可能 "status" 是 ABL 中的保留关键字。可能是这样吗?我怎样才能解决这个问题以引用 "status" 字段?
不幸的是,JSON 响应的格式和键名不在我的控制之下,我必须使用它。
众所周知,我会做这样的傻事:
JSONData = replace( JSONData, '"status":', '"xstatus":' ).
您可以在 temp-table 定义中使用 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.
尝试命名 temp-table(硬编码或通过字符串附加)+ '.' + hBuffer:BUFFER-FIELD(iStatus):NAME (...)
它应该可以帮助编译器理解您在谈论该字段。既然没有限制,这应该是强制其手,让你查询。