在JSON对象中创建属性的变量名称

时间:2012-12-10 20:25:56

标签: javascript json javascript-objects

我正在运行此代码。

var output = {"records": []};
for(i = 0; i < data.length; i++)
  output.records[i] = { propertyName : data[i][propertyName] }

我希望输出符合以下表格。

{ "cat" : "mjau" }
{ "dog" : "woff" }

相反,我对此感到惊讶。

{ "propertyName" : "mjau" }
{ "propertyName" : "woff" }

如何获取变量 propertyName

我试图创建一个解析器来创建所有 cat 的记录但是,当从其他地方调用时,记录应该有 dog 属性。我希望避免为此创建两个不同的代码片段。

我找到this question我怀疑包含我的问题的答案。然而,由于无知,我无法得到它。

4 个答案:

答案 0 :(得分:2)

不会在JavaScript中评估对象文字中的键。因此,您需要创建一个空对象({}),然后动态分配密钥:

output.records[i] = {};
output.records[i][propertyName] = data[i][propertyName]

答案 1 :(得分:0)

var a = {b:'c'}

就像

var a = {};
a['b'] = 'c';

你想要的是

a[b] = c

output.records[i] = {};
output.records[i][propertyName] = data[i][propertyName];

您在此MDN文档中有Working with objects

答案 2 :(得分:0)

{ propertyName : data[i][propertyName] }中,属性名称部分应为常量字符串。它传递一个它不会获取其值的变量。

你要做的是

for(i = 0; i < data.length; i++){
  var a = {};
  a[propertyName] = data[i][propertyName];
  output.records.push(a);
}

答案 3 :(得分:-1)

你可以试试这个:

'"' + propertyName + '"' : ...