0

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 が有効なオブジェクトであり、3 つのサブ オブジェクトがあり、サブ オブジェクトに期待されるプロパティと値があることを確認します。しかし、これは関数が呼び出された後に得られる出力です:

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

残念ながら、JSON の経験が不足しているため、回答を追跡しようとした結果が使用できなくなっていると思います。columnData のサブオブジェクトを正しく取得するループを作成するにはどうすればよいですか?

4

3 に答える 3

1

まだ columnData が必要です:

columnData[col].ColumnId
于 2012-05-09T19:28:03.883 に答える
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( '' );

また、HTML 文字列の連結が必要な場合は、テンプレート エンジン (Handlebars.js など) をお勧めします。

于 2012-05-09T19:29:01.747 に答える
1

JSON では、キー値を二重引用符で囲む必要があります。columnData変数は JSON ではなく JavaScript オブジェクトです。

そうは言っても、繰り返されるcol現在のキーです。これらのオブジェクトのいずれかのプロパティにアクセスする場合は、最初にアクセスする必要があります。columnDataobj1obj2obj3

var col;
for (var key in columnData) {
    col = columnData[key];
    r += '<td><input type="text" name="col' + col.ColumnId + '" value="' + col.Heading + '" /></td>'
}
于 2012-05-09T19:30:27.500 に答える