Javascript 从json文件中删除元素而不获取;空";
我有一个Javascript 从json文件中删除元素而不获取;空";,javascript,json,Javascript,Json,我有一个JSON格式的文本文件,我用它作为一种数据库 我读取文件,使用JSON.parse将其转换为对象,对元素使用delete,然后使用JSON.stringify对象并将其写回文件 但是,生成的文件在对象原来所在的位置有“null”,这不是正确的JSON,因此下次解析文件时,我的程序将崩溃。我不喜欢它 如何从文件中删除元素而不在元素原来所在的位置获取“null” 我是这样做的: data = fs.readFileSync("./manifest/test.json"); contents=
JSON
格式的文本文件,我用它作为一种数据库
我读取文件,使用JSON.parse
将其转换为对象,对元素使用delete
,然后使用JSON.stringify
对象并将其写回文件
但是,生成的文件在对象原来所在的位置有“null”,这不是正确的JSON,因此下次解析文件时,我的程序将崩溃。我不喜欢它
如何从文件中删除元素而不在元素原来所在的位置获取“null”
我是这样做的:
data = fs.readFileSync("./manifest/test.json");
contents=JSON.parse(data);
//some logic
delete contents.customers[i].files[j];
fs.writeFileSync("./manifest/test.json",JSON.stringify(contents,null,4));
以及之前生成的文件:
{
"customers": [
{
"customer": "test",
"files": [
{
"name": "test.flv",
"location": "cloudfront.url.com/check.flv"
}
]
}
]
}
及之后:
{
"customers": [
{
"customer": "test",
"files": [
null
]
}
]
}
但结果仍然有效
JSON.parse
应该成功。错误可能在别处。哦,老实说,我从来没有试过。我只是认为它会失败。但是我更喜欢您的解决方案在数组上使用delete
不会移动其他项的键,而是使其看起来好像删除的键没有初始化一样。你可以把它想象成a=[0,1,2];删除[1];a代码>与a=[]相同;a[0]=0;a[2]=2;a代码>只需将一个值设置为String(实际函数)而不是null,因为函数会从JSON.stringify的输出中完全删除。
contacts.customers[i].files.splice(j, 1);