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

时间:2014-08-05 21:28:38

标签: javascript json node.js

我有一个JSON文件;我想删除所有字段或对象,其名称是一个特定的单词(让我们说“测试”),然后返回剥离的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()并检查它是否是树中更深的一个对象!在这方面你能帮我吗

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

2 个答案:

答案 0 :(得分:0)

下面的递归代码将起作用。但是您需要列出可接受的字段或不可接受的字段,并根据您需要更改以下条件如果您知道不可接受的字段,则使用以下条件。

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

请参阅此网址http://jsfiddle.net/55x2V/

答案 1 :(得分:0)

此功能应该这样做:

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