2012-05-09 187 views
0

我想弄清楚我與JSON和循環通過子對象的問題。我以前從未使用過JSON,因此如果語法錯誤導致我的問題,請告訴我。JSON循環通過子對象

我定義這個JSON對象:

var columnData = { 
    "obj1":{Heading: "Test 1", Required: "True", DataTypeCode:"str", DropDownOptions: "", ColumnId: "1"}, 
    "obj2":{Heading: "Test 2", Required: "False", DataTypeCode:"dropdown", DropDownOptions: "Alpha,Beta,Gamma,Delta", ColumnId: "2"}, 
    "obj3":{Heading: "Test 3", Required: "True", DataTypeCode:"int", DropDownOptions: "", ColumnId: "3"} 
}; 

而且我將它傳遞給,做這樣的功能:

for (var col in columnData) { 
    r += '<td><input type="text" name="col' + col.ColumnId + '" value="' + col.Heading + '" /></td>' 
} 

在Firebug的斷點確認columnData是一個有效的對象,它有三個子對象,並且子對象具有期望的屬性和值。但是,這是功能後,我得到的輸出稱爲:

<td><input name="colundefined" value="undefined" type="text"></td> 

不幸的是,我認爲我缺乏與JSON經驗使我試圖跟蹤答案下來不可用的結果。我如何編寫一個能夠正確獲取columnData的子對象的循環?

+0

嗯,看起來像一個對象文本。 JSON在哪裏? –

+0

是嗎?我想我不太瞭解JSON和Javascript對象,以瞭解其差異。我從其他一些JSON問題中獲得了語法。無論哪種方式,只要它的工作,我真的不在乎,如果它在技術上是JSON或不。 – William

+0

關於JavaScript,JSON是從外部'.json'文件(來自服務器)以字符串形式獲取的,然後通過'JSON.parse'解析爲一個JavaScript對象。另一方面,當你有'var obj = {...};'時,這是一個對象字面值,並且與JSON無關。 –

回答

1

你仍然需要columnData:

columnData[col].ColumnId 
+0

謝謝你的工作。 – William

1

這樣做:

var key; 
var col; 

for (key in columnData) { 
    col = columnData[ key ]; 
    r += '<td><input type="text" name="col' + col.ColumnId + '" value="' + col.Heading + '" /></td>'; 
} 

另一種選擇:

r += Object.keys(columnData).map(function (key) { 
    var col = columnData[ key ]; 
    return '<td><input type="text" name="col' + col.ColumnId + '" value="' + col.Heading + '" /></td>'; 
}).join(''); 

我也推薦一個模板引擎(如Handlebars.js )爲您的HTML字符串連接需要。

+0

感謝您的幫助。 – William

1

JSON需要鍵值被封閉在雙引號,你columnData變量是一個JavaScript對象,而不是JSON。

這就是說,colcolumnData當前鍵被遍歷,例如obj1obj2obj3。如果要訪問這些對象之一的屬性,你需要先訪問:

var col; 
for (var key in columnData) { 
    col = columnData[key]; 
    r += '<td><input type="text" name="col' + col.ColumnId + '" value="' + col.Heading + '" /></td>' 
} 
+0

謝謝。我想我沒有使用JSON呢?無論哪種方式它現在工作。 – William

+0

@William正確,JSON和javascript對象經常混淆。 JSON是一種以字符串形式存在的數據傳輸語言,而javascript對象就是javascript對象:) – jbabey

+0

好吧,那麼JSON是可以解析爲對象的字符串嗎?我懂了。你每天學習新的東西。 – William