我确信以前一定有人问过这个问题,但我找不到这样的例子。 我有一个 JSON 字符串,它的开头是这样的:
{"model":"14","imgsize":"890","selection":{"SC":"BC","PC":"AC"},"changed":{"PC":"AC"}}
需要在用户输入时更改字符串,以便“选择”记录用户单击的所有输入,而“更改”是用户单击的最后一个内容。
所以我有一个函数,可以从文本区域读取 JSON 字符串,根据用户选择的内容(节点和值)修改它,然后将其写回到文本区域进行调试。
function changeJSON(node, value) {
json = JSON.parse($('#json').val());
json.selection[node] = value;
delete json.changed;
json.changed = {node:value};
$('#json').val(JSON.stringify(json));
}
“选择”效果很好,但“更改”更新了我传递的文字变量名称(在本例中为节点),即如果我使用 changeJSON("BC","HC") 调用该函数,JSON 字符串将变为:
{"model":"14","imgsize":"890","selection":{"SC":"BC","PC":"AC","BC":"HC"},"changed":{"node":"HC"}}
我明白 javascript 正在尝试做什么,但我希望更改的元素是我的变量包含的内容,即
,"changed":{"BC","HC"}
而不是
,"changed":{"node","HC"}
我希望有人告诉我我做错了什么!?
编辑
已解决 - 请参阅下面昆汀关于原因的解释以及我对必要的代码更改的回答 - 希望它对其他人有帮助。
最佳答案
I don't think this is the same question, mine is why the literal variable name is used rather than the contents of the variable
question referenced解释了如何解决问题,但既然您要求解释。
变量名是 JavaScript 标识符。
对象字面量语法中的属性名称也是 JavaScript 标识符(尽管您可以使用字符串字面量代替)。
由于标识符不能同时是变量和属性名称,因此不能在对象字面量语法中使用变量作为属性名称。
您必须按照引用的问题中所述创建对象,然后使用方括号表示法中的变量。
关于带有 JSON 的 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15812004/