【问题标题】:How to properly build and append a json file from variables如何从变量正确构建和附加 json 文件
【发布时间】:2020-08-11 05:51:56
【问题描述】:

我正在练习编写一个接受用户输入然后将其输出到 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"
    }
  ]
}

如何预防

l结果-----------

从被添加到文件中。

其次,我想在代码再次运行时在文件中添加额外的信息,这样输出就变成了。

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

定位文件中的某个点并添加其他对象的正确方法是什么?

虽然它可能类似于

追加

财产。

【问题讨论】:

    标签: json openedge progress-4gl


    【解决方案1】:

    我会将完整的 JSON I/O 留给语言中的 JSON 解析器。因此,我不是追加,而是将文件读入 JSON 对象,然后在内存中添加其他对象/属性并写回文件。

    仅带有 append 的输出不会产生 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).
    

    【讨论】:

      【解决方案2】:

      如何预防

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

      从被添加到文件中。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-23
        • 1970-01-01
        相关资源
        最近更新 更多