动态创建JSON键

8

我想创建一个json对象并将其作为post数组发送,但我需要动态创建键

var id = $('#myInput').val();

var post = {
    'product[123]': 'myValue',     // this works fine - but isn't dynamic
    'product['+id+']': 'myValue'   // this does not work
}

直接将其作为字符串发送没有问题,但当我想使其更具动态性时,出现了问题。我是否遗漏了一些非常简单的东西,或者我试图做一些JavaScript不应该做的事情?


1
它只是“Object”,不是“JSON对象”。 - Oleg V. Volkov
你试过这个吗:https://dev59.com/F3NA5IYBdhLWcg3wh-gC? - msanford
3个回答

21
(请注意,这与JSON无关。您在那里不使用JSON,而是使用对象初始化程序JSON是一种文本(非代码)格式,它是JavaScript对象初始化程序语法的子集。)

请在对象初始化程序之外使用[]符号:

var id = $('#myInput').val();

var post = {};
post[product[id]] = 'myValue';

这将在运行时获取product[id]的值并将其用作属性的键。如果您希望在id123时将键字面上设置为product[123],则应改用以下方式:

post['product[' + id + ']'] = 'myValue';

更通用的讨论:

var a = "foo";
var obj = {};
obj[a] = "bar";
console.log(obj.foo); // "bar"

JavaScript允许您以两种方式指定属性键:使用点表示法和文字(obj.foo),或者使用括号表示法和字符串(obj["foo"])。在后一种情况下,字符串不必是字符串字面量,它可以是任何表达式的结果。


1
我理解这个问题是他真的想要一个名为 product[123] 的属性,但这个问题根本不清楚... - Matt
@Matt:我看到了你的解释,谢谢。我本来没有那么理解,但是现在你指出来了... :-) - T.J. Crowder

0

尝试

post['product[' + id + ']'] = 'myValue';

0
为什么在对象的 ID 中要使用 '[ ]'?避免这样做。
在您的示例中,您可以通过以下代码实现此操作:
var id = $('#myInput').val();
var post = {
    '123': 'myValue',    
    id: 'myValue' 
}

或者,如果你真的非常想使用一个数组(实际上,在JavaScript中所有对象都是数组)。 你可以这样写:

var product=[];
product['123']='something';
product[id]='another';

1
иҝҷе°ҶеҲӣе»әдёҖдёӘеёҰжңүеұһжҖ§123е’ҢеұһжҖ§idзҡ„еҜ№иұЎ(post) (жј”зӨә). жӯӨеӨ–пјҢеңЁеұһжҖ§еҗҚз§°дёӯдҪҝз”Ё[]жІЎжңүд»»дҪ•й—®йўҳгҖӮ - Matt
你的代码创建了一个拥有属性名为 123id 的对象。它没有使用 id 变量的值。 - T.J. Crowder
JavaScript 中的所有东西都是对象,而不是相反;并不是所有的对象都是数组,这是不正确的。 - Matt
不使用id的值?那么对象的属性名是什么? - Jerry
@Jerry:请查看http://jsfiddle.net/sH38n/1/。这是“id”。只有在键是保留字或包含像“-”、“+”等运算符时,才需要在对象文字中引用键。 - Matt
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接