10

我想知道是否可以在 json 数组中使用分配的变量作为标识符。当我尝试这个时,我得到了一些意想不到的结果:

(代码简化,参数传递方式不同)

var parameter = 'animal';
var value = 'pony';

Util.urlAppendParameters(url, {
  parameter: value
});


Util.urlAppendParameters = function(url, parameters) {
  for (var x in parameters) {
    alert(x);
  }
}

现在警报弹出窗口显示:“参数”而不是“动物”。我知道我可以使用不同的方法(创建一个数组并在新行上分配每个参数),但我想保持我的代码紧凑。

所以我的问题是:是否可以在 json 数组中使用变量作为标识符,如果可以,你能告诉我怎么做吗?

提前致谢!

4

3 回答 3

10

您需要分两步构建对象,并使用[]属性访问器:

var parameter = 'animal';
var value = 'pony';

var obj = {};
obj[parameter] = value;

Util.urlAppendParameters (url, obj);

我不认为JSON Array是更正确的术语,我称之为Object literal

于 2010-04-29T14:55:43.133 回答
3

不,您不能在这样的对象文字中使用变量作为标识符。解析器期望那里有一个名称,因此您除了提供一个字符串之外别无他法。同样你不能做这样的事情:

var parameter = 'animal';
var parameter = 'value'; //<- Parser expects a name, nothing more, so original parameter will not be used as name

如果您真的想在单行上使用对象文字,唯一的解决方法是使用 eval:

Util.urlAppendParameters (url, eval("({" + parameter + " : value})");
于 2010-04-29T15:45:04.270 回答
1

根据您的需要,您还可以使用辅助函数构建对象;

Util.createParameters = function(args) {
    var O = {};
    for (var i = 0; i < arguments.length; i += 2)
        O[arguments[i]] = arguments[i + 1];
    return O
}

Util.urlAppendParameters (url, Util.createParameters(parameter, value, "p2", "v2"));
于 2010-04-29T15:02:37.013 回答