【问题标题】:Progress 4GL: Cannot READ-JSON the JSON that was written进度 4GL:无法读取 JSON 写入的 JSON
【发布时间】:2017-12-25 06:05:29
【问题描述】:

我遇到了 Progress READ-JSON 的问题,它不接受 WRITE-JSON 输出的 JSON。我们将 TRACKING-CHANGES 与具有嵌套数据关系的数据集一起使用。

OUTPUT TO "debug.txt".

DEFINE VARIABLE lcString AS LONGCHAR NO-UNDO.
DEFINE VARIABLE hdsBox AS HANDLE NO-UNDO.
DEFINE VARIABLE lOk AS LOGICAL NO-UNDO.

DEFINE TEMP-TABLE ttEmployee NO-UNDO
    BEFORE-TABLE ttEmployeeBefore
    FIELD eid AS INTEGER
    FIELD empname AS CHAR.
DEFINE TEMP-TABLE ttBox NO-UNDO
    BEFORE-TABLE ttBoxBefore
    FIELD eid AS INTEGER SERIALIZE-HIDDEN
    FIELD boxid AS INTEGER
    FIELD boxdesc AS CHAR.
DEFINE DATASET dsBox FOR ttEmployee, ttBox
    DATA-RELATION relat1 FOR ttEmployee, ttBox RELATION-FIELDS (ttEmployee.eid, ttBox.eid) NESTED.

CREATE ttEmployee.
CREATE ttBox.
ASSIGN ttEmployee.eid = 1
    ttEmployee.empname = "Ian"
    ttBox.eid = 1
    ttBox.boxid = 10
    ttBox.boxdesc = "Ians box".
    hdsBox = DATASET dsBox:HANDLE.

ASSIGN TEMP-TABLE ttEmployee:TRACKING-CHANGES = YES
    TEMP-TABLE ttBox:TRACKING-CHANGES = YES.

CREATE ttBox.
ASSIGN ttBox.eid = 1
    ttBox.boxid = 11
    ttBox.boxdesc = "Stewarts box"
    /*ttEmployee.empname = "Stewart"*/ .

ASSIGN lOk = hdsBox:WRITE-JSON("LONGCHAR", lcString,FALSE , "UTF-8", FALSE, FALSE, TRUE).

ASSIGN TEMP-TABLE ttEmployee:TRACKING-CHANGES = NO
    TEMP-TABLE ttBox:TRACKING-CHANGES = NO.

MESSAGE lOk ERROR-STATUS:GET-MESSAGE(1) SKIP.
MESSAGE STRING(lcString) SKIP.

ASSIGN lOk = hdsBox:READ-JSON("LONGCHAR":U, lcString, "EMPTY":U) NO-ERROR.

MESSAGE lOk ERROR-STATUS:GET-MESSAGE(1) SKIP.

此示例生成以下输出:

yes
{"dsBox":{"prods:hasChanges":true,"ttEmployee":[{"eid":1,"empname":"Ian","ttBox":[{"boxid":10,"boxdesc":"Ians box"},{"prods:id":"ttBox96513","prods:rowState":"created","boxid":11,"boxdesc":"Stewarts box"}]}],"prods:before":{}}}
no Error parsing JSON: expected string, but found bracket. (15358)

如果我删除第 35 行的评论,那么它会起作用,这让我相信这是一个 Progress 错误。

我使用的是 OpenEdge 11.4。

【问题讨论】:

  • 您使用的是哪个版本的 Progress?我在 11.6.3 上试过,不管有没有评论,它都可以工作。
  • 我使用的是 11.4。也许他们在 11.6 中修复了它。 JSON 输出在 11.6 中是否相同?
  • 是的,除了 ID“ttBox96513”之外,它们是相同的。没有多余的/缺少的括号。

标签: json openedge progress-4gl


【解决方案1】:

这是一个进度错误。为了解决这个问题,我需要在 JSON 的前表中插入一个无意义的字段。

"prods:before":{"Progress11.4bug":"Need this string or Progress will barf"}

由于某种原因,Progress 不喜欢前表为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多