Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从json文件中删除元素而不获取;空";_Javascript_Json - Fatal编程技术网

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);