【问题标题】:How to set a JSON array key on array.push on JavaScript如何在 JavaScript 上的 array.push 上设置 JSON 数组键
【发布时间】:2012-02-03 07:41:21
【问题描述】:

我正在编写一些 JS 代码,我需要在其中使用 Javascript array.push() 将变量设置为 JSON 数组中的键:

var test = 'dd'+questNumb;
window.voiceTestJSON.push({test:{"title":""}, "content":{"date":""}});

questNumb 是另一个变量。在执行该代码时,我刚刚编写test 变量的部分就变成了键"test",所以我不知道如何让它工作。怎么会这样?谢谢!

【问题讨论】:

标签: javascript arrays json push


【解决方案1】:

如果要将变量作为键,则需要括号:

var object = {};
object['dd'+questNumb] = {"title":""};
object["content"] = {"date":""};  //Or object.content, but I used brackets for consistency
window.voiceTestJSON.push(object);

【讨论】:

    【解决方案2】:

    你需要这样做:

    var test = "dd" + questNumb,
        obj = {content: {date: ""}};
    
    // Add the attribute under the key specified by the 'test' var
    obj[test] = {title: ""};
    
    // Put into the Array
    window.voiceTestJSON.push(obj);
    

    【讨论】:

      【解决方案3】:

      (首先,你没有 JSON 数组,你有一个 JavaScript 对象。JSON 是数据的字符串表示形式,其语法类似于 JavaScript 的对象字面量语法。)

      不幸的是,当您使用 JavaScript 的对象文字语法创建对象时,您不能使用变量来设置动态属性名称。您必须先创建对象,然后使用 obj[propName] 语法添加属性:

      var test = "dd" + questNumb,
          myObj = { "content" : {"date":""} };
      
      myObj[test] = {"title" : ""};
      
      window.voiceTestJSON.push(myObj);
      

      【讨论】:

      • @Dennis - 是的,“子集”是通常使用的词,但严格来说它并不完全正确,因为 "[1,2,3]" 是有效的 JSON,但它是 array 文字表示法而不是 object 文字表示法。 (我也相信有一些 unicode 字符在 JSON 中有效,但在 JavaScript 中无效,尽管我这辈子都不记得细节,也懒得去查找它。)
      • Unicode 位听起来很熟悉 - 我一直忘记 "this"["t", "h", "i", "s"] 是有效的 JSON。
      【解决方案4】:
      {test:{"title":""}, "content":{"date":""}}
      

      这是一个 JS 对象。因此,您将一个对象推入 voiceTestJSON 数组。

      与 JSON 不同,JS 对象属性名称可以带引号或不带引号。

      你想做的可以这样实现:

      var test = 'dd'+questNumb;
      var newObject = {"content":{"date":""}}; //this part does not need a variable property name
      newObject[test] = {"title":""};
      

      这样,您可以将 test 中包含的名称的属性设置为 {"title":""}。

      【讨论】:

        猜你喜欢
        • 2015-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-23
        • 1970-01-01
        • 2015-11-29
        • 2013-10-12
        相关资源
        最近更新 更多