Изменить объект json из файла и сохранить структуру

У нас есть JSON с объектом, как следующий

JSON Перед

// comment 1
{
    "version": "2.0.0",
    "tasks": [{
        "type": "task1",
        "script": "watch",
        "problemMatcher": "$tsc-watch",
        "isBackground": true,
        "presentation": {
            "aaa": "never"
        }
    }]
}
// comment 2

JSON после

Теперь я хочу добавить новый объект новой задачи (задача 2)

// comment 1
{
    "version": "2.0.0",
    "tasks": [{
            "type": "task1",
            "script": "watch",
            "problemMatcher": "$tsc-watch",
            "isBackground": true,
            "presentation": {
                "aaa": "never"
            }
        },

        {
            "type": "task2",
            "script": "watch",
            "problemMatcher": "$tsh",
            "isBackground": true,
            "presentation": {
                "aaa": "never"
            }
        }
    ]
}

// comment 2

Хитрость здесь в том, что мне нужно обновить объект без изменения структуры, строк или комментариев. Я пытаюсь с jsonParse, и он не работает

Возможно ли это в javascript / nodejs?

Всего 1 ответ


Я бы посоветовал проверить пакет comment-json , это то, для чего он предназначен, вам не нужно накатывать свой собственный для этого.

Вы можете проанализировать JSON, затем добавить новую задачу и записать в свой новый файл:

const { parse, stringify} = require("comment-json");
const fs = require("fs");

const taskFile = parse(fs.readFileSync("./input.json", "utf8"));

let taskToAdd = {
  "type": "task2",
  "script": "watch",
  "problemMatcher": "$tsc-watch",
  "isBackground": true,
  "presentation": {
      "aaa": "never" 
  }
};

taskFile.tasks.push(taskToAdd);
fs.writeFileSync("./output.json", stringify(taskFile, null, 4));

input.json

// comment 1
{
    "version": "2.0.0",
    "tasks": [{
        "type": "task1",
        "script": "watch",
        "problemMatcher": "$tsc-watch",
        "isBackground": true,
        "presentation": {
            "aaa": "never"
        }
    }]
}
// comment 2

Конечно, если вы хотите изменить JSON-файл на месте, просто установите для входных и выходных имен файлов одно и то же значение.


Есть идеи?

10000