Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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 删除包含特定单词的对象/字段_Javascript_Json_Node.js - Fatal编程技术网

Javascript 删除包含特定单词的对象/字段

Javascript 删除包含特定单词的对象/字段,javascript,json,node.js,Javascript,Json,Node.js,我有一个JSON文件;我想删除所有字段或对象,它们的名称是一个特定的单词,比如test,然后返回剥离的JSON文件;如何在Node.JS中执行此操作 下面是我的JSON文件的一个示例: { "name": "name1", "version": "0.0.1", "storage": { "db": { "test": "STRING", "tets2": "STRING", },

我有一个JSON文件;我想删除所有字段或对象,它们的名称是一个特定的单词,比如test,然后返回剥离的JSON文件;如何在Node.JS中执行此操作

下面是我的JSON文件的一个示例:

{
    "name": "name1",
    "version": "0.0.1",
    "storage": {
        "db": {
            "test": "STRING",
            "tets2": "STRING",

        },
        "test": {
            "test11": "STRING",
            "test2": {
                "test3": "0",
                "test4": "0"
            },
            "test5": {
                "test6": "0",
                "test7": "0"
            }
        },
        "test8": {
            "test9": "STRING",
            "test10": "STRING"
        }
    }
}
所需输出:

{
    "name": "name1",
    "version": "0.0.1",
    "storage": {
        "db": {            
            "tets2": "STRING",
        },        
        "test8": {
            "test9": "STRING",
            "test10": "STRING"
        }
    }
}
我尝试了下面的方法,但我不知道如何使用typeof并检查它是否是一个object,请深入树中!在这方面你能帮我吗

var new_json = config;

async.each(Object.keys(config), function(key) {

    if (key == "test") {
        delete new_json[key];
    }

    while (typeof (new_json[key]) == "object") {
        // How can I handle it here

    }
});
console.log("done!");

下面是递归代码。但您需要列出可接受的字段或不可接受的字段,并在此基础上,如果您知道不可接受的字段,则需要更改以下条件,然后使用以下条件

unAcceptableFields.indexOf(key) > 0



var acceptableFields = ["name","version","storage","db", "test9", "test10","tets2", "test8", "test9", "test10" ];
console.log(removeUnwantedFields(testObject, acceptableFields));

function removeUnwantedFields(jsData,acceptableFields) {
    var key;
    if (jsData) {
        for (key in jsData) {           
            if (acceptableFields.indexOf(key) == -1) {
                delete jsData[key];
            }
            else if(typeof jsData[key] === "object"){
              jsData[key] = removeUnwantedFields(jsData[key],acceptableFields);
            }
        }
    }
    return jsData;
}

请参考此URL,此函数应执行以下操作:

function clean(obj,target) {
    var tmpobj = obj;
    for (var key in tmpobj) {
        if (key === target) {
            delete obj[key];
        }
        else if (typeof obj[key] === "object") {
            obj[key] = clean(obj[key],target); 
        }
    }
    return obj;
}
这样称呼:

json_struct = clean(json_struct,"test")

所有字段或对象。。。那是哪一个?是要从所有对象中删除名为test的属性,还是要删除包含属性测试的对象?我要从JSON文件中删除名称为test的所有字段或对象;现在我包含了所需的输出;棘手的一点是,当我们删除一个名为test的对象时,您可以使用for in循环或object.keys函数检查对象属性,然后检查该属性是否是您要查找的,可能使用正则表达式,如果是,使用delete语句从对象中删除属性。如果我在未尝试的情况下发布了我的问题,则表示抱歉;现在我已经提到了我的尝试,我想知道你是否可以帮我!我真的很感激!文件是动态的;上面提到的例子只是一个例子!此代码甚至不适用于该特定示例!