Как правильно построить и добавить файл json из переменных - PullRequest
1 голос
/ 27 апреля 2020

Я практикую программирование приложения, которое принимает пользовательский ввод, а затем выводит его в файл 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

.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2020

Я бы оставил полный JSON ввод / вывод для синтаксического анализатора JSON на языке. Поэтому вместо добавления я бы считал в файле объект JSON, добавил дополнительные объекты / свойства в память и записал обратно в файл.

Просто вывод с добавлением не даст значение 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).
0 голосов
/ 27 апреля 2020

как мне предотвратить добавление

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

в файл.

Я подозреваю, что это потому, что переменная имеет фразу VIEW-AS на определение. Но использование JsonObject в качестве объекта и вызов метода WriteFile - это (гораздо) лучший подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...