将变量字面放在JSON中

时间:2012-03-21 10:12:14

标签: javascript json

我想使用javascript对象初始值表示法动态创建JavaScript对象,但是从config中获取键,因此不是

var obj = {
  'key' : 'some value'
};

我想:

var config = {
  myKeyName: 'key'
};

var obj = {
  config.myKeyName : 'some value' // this will not work, just to illustrate
};

问题是如何在这种情况下放置config.myKeyName的值。

这可能吗?

编辑:我知道使用索引([]),但在深层嵌套对象的情况下,这不是一个选项。

5 个答案:

答案 0 :(得分:1)

您可以使用方括号语法动态访问属性。例如,假设config.keyName包含字符串" hello":

var obj = {};
obj[config.keyName] = "some value";

/* The above is equivalent to:

   var obj = {
       hello: "some value"
   };
*/

值得注意的是,正如其他人所提到的,这是一个JavaScript对象文字。它不是JSON。 JSON只是一种常用于数据传输的文本格式,恰好可以共享JavaScript对象文字的一些属性。

答案 1 :(得分:1)

Javascript中没有“JSON表示法”这样的东西。它是对象文字表示法,JSON使用Javascript表示法的一个子集,而不是相反。

您不能在对象文字中使用变量作为属性名称。您必须使用属性索引将属性添加到对象:

var obj = {};
obj[config.myKeyName] = "some value";

答案 2 :(得分:1)

从你的评论和编辑中,你的问题似乎是:对于深度嵌套的对象,我可以让键是动态的,但仍然具有对象初始化器语法。

例如,不是:

var key1 = "a", key2 = "b", key3 = "c", obj;
obj = {}
obj[key1] = {};
obj[key1][key2] = {};
obj[key1][key2][key3] = 42;

但是

var obj = {
    /*magic here using key1 to get "a"*/: {
        /*magic here using key2 to get "b"*/: {
            /*magic here using key3 to get "c"*/: 42
        }
    }
};

答案是否定的,除了eval之外没有办法做到这一点。对象初始值设定项中的键不能从变量派生。 []符号是使用字符串定义属性名称的最佳选项(我能看到的唯一其他选项是Object.defineProperty,这将更糟糕,仅限ES5)。对于深层嵌套的结构,听起来你会想要某种递归的工厂函数。

答案 3 :(得分:0)

var obj = {}

obj[config.myKeyName] = 'some value';

答案 4 :(得分:0)

var config = {
  myKeyName: 'key'
};

var obj = {
  'config.myKeyName' : 'some value' // note quote here on key
};
//console.log(obj);