2011-11-24 81 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