2011-11-24 83 views
1

我有一个名为data的嵌套javascript对象。有没有什么方法可以遍历它并找到所有具有未定义值的属性,并将其设置为字符串“undefined”insted。如果在IE7中属性值未定义,JSON不会验证。由于找到并更改undefined值的属性

{ 
"Target": "System", 
"Systemoperation": "Buy-In", 
"Systemorigin": "ABB", 
"Subscriptionmode": "Maintain & Evolve", 
"Evolveto": "800xA", 
"Quoteselection": "Full Quote", 
"Commitmenttimeframe": "3 years", 
"codevalues": { 
    "Target": 100, 
    "Systemoperation": 110, 
    "Systemorigin": false, 
    "Subscriptionmode": 4, 
    "Evolveto": undefined, 
    "Quoteselection": "fullquote", 
    "Commitmenttimeframe": 3 
}, 
"Route": [ 
    "System", 
    "Buy-In", 
    "ABB", 
    "Maintain & Evolve", 
    "800xA", 
    "Full Quote", 
    "3 years" 
], 
"currentsystem": "" 

}

这里是evolteto在codevalues不确定。哪些不验证(尝试http://jsonlint.com/)。

+1

任何代码到目前为止打电话了吗? – Niels

+1

请为我们创建一个示例来看看:http://jsfiddle.net/ – Rumplin

+0

@Niels更新后 – Johan

回答

0

如果这是你的数据结构(嵌套的OBJ):

data = { 
    a: undefined, 
    b:{ 
    c: '1', 
    d: undefined 
    } 
} 

然后,这对你的作品

for (var items in data) { 

    if (data[items] === undefined) { 
    data[items] = 'undefined'; 
    continue; 
    } 
    for (var i in data[items]) { 
    if (data[items][i] === undefined) { 
     data[items][i] = 'undefined'; 
    } 
    } 
} 
+0

没有比检查每个级别的方法吗? – Johan

0

一个非常粗略的搜索,但作品,

for(var prop in arr) 
{ 
    if(typeof arr[prop] === 'object') 
    { 
     for(var subprop in arr[prop]) 
     { 
      if(typeof arr[prop][subprop] === 'undefined') 
       arr[prop][subprop] = "undefined"; 
     } 
    } 
} 

http://jsfiddle.net/h27dp/1/ - JSON验证器也验证这里获得的结果为“Good JSON”

0
function disp(j) { 
    for(var key in j) { 
    if(j.hasOwnProperty(key)) { 
     if(typeof j[key] === "object") { 
     disp(j[key]); 
     } 
     else { 
     if (j[key] === undefined) { 
      j[key] = "undefined"; 
     } // if undefined key 
     } // else 
    } // if hasOwnProperty 
    } // for 
} // function 

然后用

disp[data];

+0

当我登录数据对象时,所有我得到返回是undefined – Johan

+0

检查现在。先前的右括号在第3行丢失。在[小提琴]检查小提琴(http://jsfiddle.net/aR1ndAm/Y23zf/1/) – Arindam

+0

是的,我注意到已经,它仍然没有定义... – Johan