如何在javascript中动态构建JSON?

Saf*_*ppa 33 javascript

var myJSON = {  
              "list1" : [ "1", "2" ],
              "list2" : [ "a", "b" ],
              "list3" : [ { "key1" : "value1" }, { "key2" : "value2" } ],
              "not_a_list" : "11"
             };
Run Code Online (Sandbox Code Playgroud)

如何在javascript中动态构建此JSON结构?谷歌告诉我使用一些推送命令,但我只找到了具体案例.那么我要写什么来输入数据到"listX"和"not_a_list".添加以及创建新列表.整个过程与:

var myJSON = {};
Run Code Online (Sandbox Code Playgroud)

Nea*_*all 66

首先,我认为你称之为错误."JSON"代表"JavaScript Object Notation" - 它只是一个用于在字符串中表示某些数据的规范,该字符串明确地模仿JavaScript对象(以及数组,字符串,数字和布尔值)文字.您正在尝试动态构建JavaScript对象 - 因此您要查找的单词是"object".

随着那个迂回曲折,我认为你问的是如何设置对象和数组属性.

// 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';
Run Code Online (Sandbox Code Playgroud)

该代码将构建您在问题中指定的对象(除了我称之为myObject而不是myJSON).有关访问属性的更多信息,我建议使用Mozilla JavaScript指南JavaScript:The Good Parts.

  • 关于“键是数字”(有点迂腐):事实并非如此,键总是对象(包括数组)中的字符串,并且 `[0]` 等隐式转换为 `["0"]` 等。 (例如,参见 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)。 (2认同)

And*_*eKR 12

作为myJSON对象,您可以设置其属性,例如:

myJSON.list1 = ["1","2"];
Run Code Online (Sandbox Code Playgroud)

如果您不知道属性的名称,则必须使用数组访问语法:

myJSON['list'+listnum] = ["1","2"];
Run Code Online (Sandbox Code Playgroud)

如果要向其中一个属性添加元素,则可以执行;

myJSON.list1.push("3");
Run Code Online (Sandbox Code Playgroud)