带有 JSON 的 Javascript 对象

标签 javascript json

我确信以前一定有人问过这个问题,但我找不到这样的例子。 我有一个 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/

相关文章:

javascript - geoxml3:如何加载自定义图标

javascript - 使用mvc下载文件

javascript - 使用纯 javaScript 而不是 coffeeScript

c# - 如何为 Windows Phone 7 解析以下 JSON?

json - 如何使用jsp创建Jqgrid

c# - JSON 补丁更新嵌套对象

javascript - 如何在 Chrome Extension Manifest.json 中设置内容安全策略以使 Firebase 正常工作

javascript - 任何好的 javascript 库都允许抓取网站

javascript - 从 JavaScript 中删除 HTML li 和文本

ios - UICollection View 异步图像加载+重新加载