OpenEdge ABL保留关键字作为临时表字段名称(从JSON数据推断)
我坚持以下情况:OpenEdge ABL保留关键字作为临时表字段名称(从JSON数据推断)
我的方法接收来自外部REST API调用的响应。 JSON响应结构如下:
{
"members": [
{
"email_address": "[email protected]",
"status": "randomstatus"
},
...etc...
]}
我读这临时表与READ-JSON(从推断JSON数据ABL模式),并尝试处理临时表。而这就是我卡住的地方: 当我试图放在一起包含临时表字段“状态”的查询时,会引发错误。 实施例:
hQuery:QUERY-PREPARE('FOR EACH ' + httSubscriber:NAME + ' WHERE ' + hBuffer:BUFFER-FIELD(iStatus):NAME + ' = "randomstatus"').
给出:
**后无法理解 - “成员WHERE”(247)
我曾尝试通过名称直接引用为好,相同的结果。
可能是“状态”是ABL中的保留关键字。可能是这种情况?并且我怎样才能解决这个问题,以引用“状态”字段?
不幸的是,JSON响应的格式和键名不在我的控制之下,我必须使用它。
你可以在临时表定义中使用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.
谢谢,这很好地解决了我的问题。 – AlisaDu
我已经知道做傻事这样的:
JSONData = replace(JSONData, '"status":', '"xstatus":').
尝试命名临时表(硬编码或通过字符串追加)+'。' + hBuffer:BUFFER-FIELD(iStatus):NAME(...)
它应该有助于编译器理解你正在谈论的领域。由于它不受限制,所以应该强制它的手并允许你查询。
不幸的是,这并没有在我的情况。 '(...)httSubscriber:NAME +'。' + hBuffer:BUFFER-FIELD(iStatus):NAME(...)'评估为'members.status',给出相同的错误。 – AlisaDu
你确定你的缓冲值是正确的吗?当我在动态查询中拥有“状态”时,我没有收到该错误。可能是httSubscriber:NAME和/或hBuffer:FIELD-VALUE(iStatus):NAME没有返回你认为它们的值。 – TheDrooper