【问题标题】:Add new object to JSON automatically自动将新对象添加到 JSON
【发布时间】:2021-12-26 13:15:15
【问题描述】:

所以基本上,我正在为前端开发者开发这个项目,我想更进一步,让它显示存储的任务以及添加新的任务。

// JSON.data
[
    {
        "name": "task1",
        "todo": "Complete online Javascript course"
    },
    {
        "name": "task2",
        "todo": "Jog around the park 3x"
    }
]
// Script
getData = () => {
    const xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status ==200) {
            const myData = JSON.parse(this.responseText)
            dataUse(myData)
            saveData(myData)
        }
    }
    xhttp.open("GET", "data.json", true);
    xhttp.send();
}

dataUse = (object) =>{
    object.forEach((datas)=>{
        const todo = document.createElement('div')
        todos.appendChild(todo)

        const input = document.createElement('input')
        input.setAttribute('type', 'checkbox')
        input.setAttribute('id', datas.name)
        input.setAttribute('class', 'checks')
        todo.appendChild(input)
        
        const label = document.createElement('label')
        label.setAttribute('for', datas.name)
        label.setAttribute('class', `${datas.name} tasks`)
        todo.appendChild(label)
        
        const span = document.createElement('span')
        label.appendChild(span)
        
        const paragraph = document.createElement('p')
        paragraph.innerHTML = datas.todo
        label.appendChild(paragraph)
    })
}

getData()

目前,上面的代码会加载数据,然后继续制作所需的元素并将信息放置在正确的位置。

我现在需要做的是让它自动将一个新对象保存到 JSON 文件中(当输入有一个值时(我想我可以自己计算这部分)),然后像 dataUse 函数一样继续显示它做。 这是我试图做的:

let newData = {
    name: "task3",
    todo: "Water the plants"
}

const fs = require('fs')

const saveData = (object) =>{
    const finished = (error)=>{
        if(error){
            console.error(error);
            return
        }
    }

    object.push(newData)

    const jsonData = JSON.stringify(object, null, 2)
    fs.writeFile('data.json', jsonData, finished)
}

这似乎不起作用,但是当我尝试推送 newData 而不尝试重写文件和 console.log 时,它确实显示了所有对象,包括新对象。那么我该如何进行这项工作呢?还是有更好的方法来做到这一点?

【问题讨论】:

    标签: javascript json xmlhttprequest


    【解决方案1】:

    我想你要找的是fs.appendFile

    fs.appendFile("data.json", jsonData, finished);
    

    我有一个使用这种通用格式作为参考的回购:https://github.com/cireneirbo/iCanRead-iCanWrite-imFS/blob/main/main.js

    【讨论】:

    • 我不认为这是使用追加或写入的问题。问题是该功能没有做任何事情。同样附加它只是将它添加到文件中,它应该被插入到数组中。
    猜你喜欢
    • 1970-01-01
    • 2018-02-08
    • 2020-12-03
    • 2021-11-12
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多