Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有JSON的Javascript对象_Javascript_Json - Fatal编程技术网

带有JSON的Javascript对象

带有JSON的Javascript对象,javascript,json,Javascript,Json,我肯定这之前一定有人问过,但我找不到这样的例子。 我有一个JSON字符串,它的开头是这样的: {"model":"14","imgsize":"890","selection":{"SC":"BC","PC":"AC"},"changed":{"PC":"AC"}} 需要在用户输入时更改字符串,以便“选择”记录用户单击的所有输入,“更改”是用户最后单击的内容 因此,我有一个函数,可以从textarea读取JSON字符串,根据用户选择的内容(节点和值)对其进行修改,然后将其写回文本区域进行调试

我肯定这之前一定有人问过,但我找不到这样的例子。 我有一个JSON字符串,它的开头是这样的:

{"model":"14","imgsize":"890","selection":{"SC":"BC","PC":"AC"},"changed":{"PC":"AC"}}
需要在用户输入时更改字符串,以便“选择”记录用户单击的所有输入,“更改”是用户最后单击的内容

因此,我有一个函数,可以从textarea读取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));
}
“selection”工作得很好,但“changed”更新了我传递给它的文本变量名(在本例中是节点),即如果我使用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"}
我希望有人告诉我我做错了什么

编辑

已解决-请参阅下面的昆汀解释,了解原因以及我对必要代码更改的回答-希望它能帮助其他人

我不认为这是同一个问题,我的问题是为什么使用文字变量名而不是变量的内容

说明了如何解决问题,但由于您要求解释

变量名是JavaScript标识符

对象文字语法中的属性名也是JavaScript标识符(尽管可以改用字符串文字)

由于标识符不能同时是变量和属性名称,因此不能在对象文字语法中为属性名称使用变量


如参考问题中所述,您必须创建对象,然后使用方括号表示法中的变量。

正如昆汀所建议的,解决方案是首先创建对象,即

delete json.changed;
json.changed = {};
json.changed[node] = value;

那是你真正的json吗?它是无效的。通过将数据存储为JSON字符串,每次希望更改属性值时,都会重复解析和字符串化对象,从而产生开销。为什么不将它保存为对象,并在需要时将其字符串化?@Sheikheera是的,好的,我没有把脚本放在末尾。啊,我以为你想找到解决方案,而不是(仅仅)解释。解释很简单:对象文本中的键按字面解释,而不是解析为标识符。这是在ECMAScript规范中定义的。谢谢你,我自己刚刚想到了这一点,然后回来回答问题。非常感谢,我会把这归功于你的!