2010-11-30 4 views
26
var myJSON = { 
       "list1" : [ "1", "2" ], 
       "list2" : [ "a", "b" ], 
       "list3" : [ { "key1" : "value1" }, { "key2" : "value2" } ], 
       "not_a_list" : "11" 
      }; 

このJSON構造をjavascriptで動的に構築するにはどうすればよいですか? Googleはいくつかのプッシュコマンドを使用するよう指示していますが、私は特定のケースしか見つけていません。だから私は "listX"と "not_a_list"にデータを入力するために何を書くのですか?追加するだけでなく、新しいリストを作成する。 begninning全体の手順:myJSONとしてJSONをjavascriptで動的にビルドするにはどうすればよいですか?

var myJSON = {}; 
+0

実際にはJSON(文字列)か、ネストJavaScriptオブジェクト、配列、文​​字列、数値(JSONにシリアル化可能)のコレクションですか? – Quentin

答えて

53

まず、あなたはそれを間違ったものと呼んでいると思います。 "JSON"は "JavaScript Object Notation"の略で、JavaScriptオブジェクト(および配列、文字列、数値、ブール値)リテラルを明示的に模倣する文字列のデータを表す仕様です。あなたは動的にJavaScriptオブジェクトを構築しようとしています - あなたが探している言葉は "オブジェクト"です。

私はあなたがオブジェクトと配列のプロパティを設定する方法を尋ねていると思います。コードは、あなたの質問に指定されたオブジェクトを構築します

// make an empty object 
var myObject = {}; 

// set the "list1" property to an array of strings 
myObject.list1 = ['1', '2']; 

// you can also access properties by string 
myObject['list2'] = []; 
// accessing arrays is the same, but the keys are numbers 
myObject.list2[0] = 'a'; 
myObject['list2'][1] = 'b'; 

myObject.list3 = []; 
// instead of placing properties at specific indices, you 
// can push them on to the end 
myObject.list3.push({}); 
// or unshift them on to the beginning 
myObject.list3.unshift({}); 
myObject.list3[0]['key1'] = 'value1'; 
myObject.list3[1]['key2'] = 'value2'; 

myObject.not_a_list = '11'; 

(私はそれがmyJSONするのではなく、MyObjectに呼び出すことを除きます)。プロパティへのアクセスの詳細については、Mozilla JavaScript Guideと書籍JavaScript: The Good Partsをお勧めします。

+0

"キーは数字です"(やや甘い):キーは常にオブジェクト(配列を含む)の文字列であり、 '[0]'などは暗黙的に '[" 0 "]'などに変換されます(例えば、https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keysを参照してください)。 –

12

は、たとえば、あなただけのそのプロパティを設定できるオブジェクトです。

myJSON.list1 = ["1","2"]; 

あなたがプロパティの名前を知らない場合は、あなたが使用する必要があります配列アクセス構文:

myJSON['list'+listnum] = ["1","2"]; 

1つのプロパティに要素を追加する場合は、次のようにします。

myJSON.list1.push("3"); 
関連する問題