向现有的JSON对象添加数据

3
所需要完成的目标是创建一个用于存储用户信息的 json 文件。目前遇到的问题是不知道如何添加新的嵌套对象并使其为空,然后保存该 json 文件并重新加载它。
在我的 *json* 文件中,现有以下内容:
{
    "users" : {
        "test" : {

        },
        "test1" : {

        }
    }
}

我正在尝试添加任意数量的新对象。例如:
{
    "users" : {
        "test" : {

        },
        "test1" : {

        },
        "test2" : {

        },
        "test3" : {

        }
    }
}

我的服务器端JavaScript

    json.users.push = username;
    fs.writeFile("./storage.json", JSON.stringify(json, null, 4) , 'utf-8');
    delete require.cache[require.resolve('./storage.json')];
    json = require("./storage.json");

使用这个代码,它不会写入文件,因此当要求完成时,我最终得到相同的文件,并且我的json对象在console.log中如下所示

{                                                                                                                                                    
    "users": {                                                                                                                                       
        "test": {},                                                                                                                                  
        "test1": {},                                                                                                                                 
        "push": "test2"                                                                                                                                
    }                                                                                                                                                
}

请不要推荐一些外部模块来解决这么简单的问题。另外,如果有人能指引我一个深入的JSON文档,直接说明我要做什么,那就太感激了。

2
没有所谓的JSON对象。有对象,也有JSON。这就像蛋糕食谱和蛋糕之间的区别。没有所谓的蛋糕食谱蛋糕。 - David Haim
你认为 json.users.push 是什么意思? - user663031
1个回答

3

使用[]访问对象上的动态键

json.users[username] = {a: 1, b: 2}

但注意不要像那样命名变量,因为你使用的json并不是JSON。JSON是一个字符串,而不是一个带有键的对象。

看下面的演示以进行区分:

var json = '{"users":{"test1":{},"test2":{}}}';
var obj  = JSON.parse(json);
var newuser = 'test3';
obj.users[newuser] = {};
console.log(JSON.stringify(obj));
//=> {"users":{"test1":{},"test2":{},"test3":{}}}


直截了当!你太棒了!你知道在哪里可以找到有关使用JavaScript操作JSON的深入文档吗?另外,你有任何线索为什么我的fs.writefile不起作用吗? - Darkrum
你永远不应该直接操作JSON。总是使用var x = JSON.parse(yourJson)将其解析为对象,对x进行操作,然后使用JSON.stringify(x)重新编写JSON。 - Mulan
我知道我的做法是非标准化的,因此必须仔细观察自己,以免搞砸。 - Darkrum
看起来你正在尝试同步使用 fs.writeFile,也许可以尝试使用 fs.writeFileSync。如果这不起作用,你应该提出一个新的问题。 - Mulan
不,我知道你使用解析和字符串化。我并非在那个意义上使用操作。 - Darkrum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接