无法使用JSON

时间:2015-11-10 02:59:53

标签: javascript json

function one(data) {
  someotherfunction({
    data.id: {
      name: data.nm,
      age: data.age
    });
}
one({ id: 2, name: "Stack", age: "20" });

为什么我不能将data.id设置为该子对象的属性名称?我尝试了许多设置id的方法,但只有在我将其设置为某个字符串名称时才有效....

var i = data.id;
someotherfunction({i:{name:data.nm,age:data.age});

它不识别变量吗?

3 个答案:

答案 0 :(得分:1)

我不认为这是一个有效的propertyName或标识符,它肯定不是字符串文字。试试这样:

function one(data){
   var nObj = { };
   nObj[data.id] = { name : data.nm, age: data.age };
   someotherfunction(nObj);
}

one({id:2,name:"Stack",age:"20"});
//nObj = { 2 : { name : "Stack, age : "20" } }

答案 1 :(得分:1)

来自RobG的回答:https://stackoverflow.com/a/6500668

  

在对象文字中(ECMA-262§11.1.5将其称为“对象”   初始化“)键必须是以下之一:

     
      
  1. IdentifierName
  2.   
  3. 串文字
  4.   
  5. NumericLiteral
  6.   

您可以执行以下操作:

function one(data) {
   var d = {};
   d[data.id] = { name: data.name, age: data.age };
   someotherfunction(d);
   }
one({ id: 2, name: 'Stack', age: '20' });

在以下代码中提及代码:
http://jsfiddle.net/sna04g8m/1

答案 2 :(得分:0)

您可能正在寻找computed property names,这是某些浏览器支持的ECMAScript 2015中的新功能,例如:

// Requires support for ECMAScript 2015 computed property names
function one(data) {
  return {
    [data.id]: {
      name: data.name,
      age: data.age
  }};
}

document.write(JSON.stringify(one({ id: 2, name: "Stack", age: "20" })));