我遇到以下情况:
我的方法从外部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响应的格式和密钥名称不在我的控制之下,我必须使用它。
答案 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(...)
它应该有助于编译器理解你在谈论这个领域。由于它没有受到限制,因此应强制其手并允许您查询。