2012-05-09 9 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"} 
}; 

そして、私はこれを行う関数に渡している:Firebugの中

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

ブレークポイントは、columnDataは、有効なオブジェクトであることを確認しますそれには3つのサブオブジェクトがあり、サブオブジェクトには期待されるプロパティと値があります。しかし、これは関数が呼び出された後、私は取得しています出力されます:

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

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

columnData[col].ColumnId 
+0

Hmはオブジェクトリテラルのようです。 JSONはどこですか? –

+0

それは?私はJSONとJavascriptオブジェクトの違いを知るだけの十分な知識はないと思う。私は他のJSONの質問から構文を得ました。いずれにしても、動作する限り、技術的にJSONかどうかは気にしません。 – William

+0

JavaScriptに関しては、(サーバーからの)外部の '.json'ファイルからJSONが文字列として取り出され、' JSON.parse'を介してJavaScriptオブジェクトに解析されます。一方、 'var obj = {...};'がある場合、これはオブジェクトリテラルであり、JSONとは関係ありません。 –

答えて

1

あなたはまだcolumnDataはを必要とします)あなたのHTML文字列の連結のためのニーズ

+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のように(テンプレートエンジンをお勧めします

+0

助けてくれてありがとう。 – William

1

JSONではキー値を二重引用符で囲む必要があります。columnData変数はJSONではなくJavaScriptオブジェクトです。例えば、colは、columnDataの現在のキーであると言われている。例えば、colは、columnDataの現在のキーである。 obj1,obj2,obj3。これらのオブジェクトのいずれかのプロパティにアクセスするには、最初にアクセスする必要があります。

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

@ウィリアム正しい、JSONオブジェクトとjavascriptオブジェクトはしばしば混乱します。 JSONは、文字列として存在するデータ転送言語ですが、javascriptオブジェクトは、よく、javascriptオブジェクトです。 – jbabey

+0

だから、JSONはオブジェクトに解析できる文字列ですか?そうですか。あなたは毎日新しいことを学びます。 – William

関連する問題