如何从变量正确构建和附加 json 文件

How to properly build and append a json file from variables

我正在练习编写一个接受用户输入然后将其输出到 json 文件的应用程序。

我找到了说明如何操作的方法。为了篇幅,我省略了输入代码,只包括 json 构建器。

  ASSIGN 
            uComp = "testCompany"
            uEmail = "testEmail"
            uName = "testName"
            uAdd = "Additional"

        .


          DEFINE VARIABLE myObj         AS JsonObject NO-UNDO.
          DEFINE VARIABLE myData        AS JsonObject NO-UNDO.
          DEFINE VARIABLE dataParams      AS JsonObject NO-UNDO.
          DEFINE VARIABLE lResult       AS LONGCHAR NO-UNDO
              VIEW-AS EDITOR LARGE SIZE 60 BY 16.
          DEFINE VARIABLE lJArray       AS JsonArray  NO-UNDO.
          DEFINE VARIABLE lAnotherArray AS JsonArray  NO-UNDO.

          OUTPUT TO "output path.json".


          myObj = NEW JsonObject().
          dataParams = NEW JsonObject().



          myObj:Add("id", "01").

          dataParams:Add("Company_name", uComp).
          dataParams:Add("uEmail", uEmail).
          dataParams:add("uName", uName).
          dataParams:add("AddInfo", uAdd).


          lJArray = NEW JsonArray().
          lJArray:Add(dataParams).


          myObj:Add("data", lJArray).


          myObj:Write(lResult, TRUE).




          DISPLAY lResult.

那部分工作正常,但我的输出是这样的:

lResult-----------------------------------------------------

{
  "id": "01",
  "data": [
    {
      "Company_name": "testCompany",
      "uEmail": "testEmail",
      "uName": "testName",
      "AddInfo": "Additional"
    }
  ]
}

如何防止

lResult-----------

不会被添加到文件中。

其次,我想在代码再次运行时向文件添加额外的信息,以便输出成为。

{
  "id": "01",
  "data": [
    {
      "Company_name": "testCompany",
      "uEmail": "testEmail",
      "uName": "testName",
      "AddInfo": "Additional"
    },
     {
      "Company_name": "testCompany",
      "uEmail": "testEmail",
      "uName": "testName",
      "AddInfo": "Additional"
    }
  ]
}

以文件中的某个点为目标并添加其他对象的正确方法是什么?

虽然这可能类似于

append

属性.

我会将完整的 JSON I/O 留给语言中的 JSON 解析器。因此,我没有追加,而是将文件读入 JSON 对象并在内存中添加额外的 objects/properties 并写回文件。

仅带有追加的输出不会产生值 JSON。这应该有效:

FILE-INFORMATION:FILE-NAME = "myfile.json" .

IF FILE-INFORMATION:FULL-PATHNAME > "":U THEN DO:
    myObj = CAST ((NEW ObjectModelParser()):ParseFile(FILE-INFORMATION:FULL-PATHNAME),
                  JsonObject) .

    lJArray = myObj:GetJsonArray("data") .
END.
ELSE DO:
    myObj = NEW JsonObject().
    myObj:Add("id", "01").
    lJArray = NEW JsonArray().
    myObj:Add("data", lJArray).
END.

dataParams = NEW JsonObject().
dataParams:Add("Company_name", uComp).
dataParams:Add("uEmail", uEmail).
dataParams:add("uName", uName).
dataParams:add("AddInfo", uAdd).

lJArray:Add(dataParams).

myObj:WriteFile("myfile.json", TRUE).

how do I prevent the

lResult-----------

from being added to the file.

我怀疑是因为变量在定义中有一个 VIEW-AS 短语。但是使用 JsonObject 作为对象并调用 WriteFile 方法是(远)更好的方法。