从JSON中删除子节点

时间:2014-11-25 10:56:26

标签: javascript json angularjs

我有以下JSON。我必须从阵列中单独删除子节点,其余内容应该可用。

{
"model_type_name": "portfolio",
"hier_model_type_name": "portfolio",
"object_type": "product",
"gen_new_flag": "n",
"mkt_map_req_flag": "n",
"rule_based_flag": null,
"custom_price_type": null,
"hier_id": 468299069,
"hier_name": "AMS",
"parent_hier_id": 1,
"parent_hier_name": "Portfolio",
"level": "2",
"isLeaf": "0",
"parentage": "\\Portfolio\\AMS",
"hier_gen_new_flag": "y",
"hier_child_gen_new_flag": "y",
"hier_entity_role": "parent",
"hier_child_entity": "portfolio",
"hier_rel_type_name": "portfolio hierarchy",
"hist_flag": "y",
"hier_hist_flag": "y",
"rls_type": null,
"mass_updt_flag": null,
"children": [
    {
        "model_type_name": "dummy",
        "hier_model_type_name": "portfolio",
        "object_type": "product",
        "gen_new_flag": "n",
        "mkt_map_req_flag": "n",
        "rule_based_flag": null,
        "custom_price_type": null,
        "hier_id": 469444670,
        "hier_name": "Integrated Solutions",
        "parent_hier_id": 468299069,
        "parent_hier_name": "AMS",
        "level": "3",
        "isLeaf": "0",
        "parentage": "\\Portfolio\\AMS\\Integrated Solutions",
        "hier_gen_new_flag": "y",
        "hier_child_gen_new_flag": "y",
        "hier_entity_role": "parent",
        "hier_child_entity": "portfolio",
        "hier_rel_type_name": "portfolio hierarchy",
        "hist_flag": "y",
        "hier_hist_flag": "y",
        "rls_type": null,
        "mass_updt_flag": null,
        "children": [
            {
                "model_type_name": "dummy",
                "hier_model_type_name": "portfolio",
                "object_type": "product",
                "gen_new_flag": "n",
                "mkt_map_req_flag": "n",
                "rule_based_flag": null,
                "custom_price_type": null,
                "hier_id": 469444678,
                "hier_name": "Healthcare",
                "parent_hier_id": 469444670,
                "parent_hier_name": "Integrated Solutions",
                "level": "4",
                "isLeaf": "1",
                "parentage": "\\Portfolio\\AMS\\Integrated Solutions\\Healthcare",
                "hier_gen_new_flag": "y",
                "hier_child_gen_new_flag": "n",
                "hier_entity_role": "parent",
                "hier_child_entity": "portfolio",
                "hier_rel_type_name": "portfolio hierarchy",
                "hist_flag": "y",
                "hier_hist_flag": "y",
                "rls_type": null,
                "mass_updt_flag": null,
                "children": null,
                "hierGenNewFlag": true,
                "releaseDriven": false,
                "genNewFlag": false,
                "hierChildGenNewFlag": false,
                "massUpdateFlag": false
            }
        ],
        "hierGenNewFlag": true,
        "releaseDriven": false,
        "genNewFlag": false,
        "hierChildGenNewFlag": true,
        "massUpdateFlag": false
    }
],
"hierGenNewFlag": true,
"releaseDriven": false,
"genNewFlag": false,
"hierChildGenNewFlag": true,
"massUpdateFlag": false

}

我尝试了这段代码:但它无效..请帮忙

for(var i=0; i< $scope.selectedNode.length; i++){
                        var obj = scope.selectedNode[i];
                        for(var k in obj){
                            if(k == "children"){
                                 if(!obj[k]){
                                     delete $scope.selectedNode.children;
                                 }
                             }
                        }
                    }   

2 个答案:

答案 0 :(得分:0)

由于这一行不起作用:

if(!obj[k]){

children只有在值为falseundefinednull0NaN或{{1}时才会被删除}}。对象始终评估为""。 (您可以通过键入true)在浏览器的JS控制台中进行检查。

您应该删除整个条件或'!'。

答案 1 :(得分:0)

如果是对象,请执行以下操作:

delete object.node;

<强>注意

对于无法使用object.length的对象,它不会返回任何内容,您必须使用Object.getLength(object);