如何在JavaScript中更新嵌套JSON?
我有一个如何在JavaScript中更新嵌套JSON?,javascript,json,Javascript,Json,我有一个请求\u json,它将得到不同级别的更新 示例: request_json = {"filter":""}; // I was updating it like(some where in script).. request_json.filter = {div_id_1:[1,2,3]}; // Second time updating(some another place in script) is not working request_json.filter = {div_
请求\u json
,它将得到不同级别的更新
示例:
request_json = {"filter":""};
// I was updating it like(some where in script)..
request_json.filter = {div_id_1:[1,2,3]};
// Second time updating(some another place in script) is not working
request_json.filter = {div_id_2: ['abc','def']}; //not working.
request_json = {"filter":{div_id_1:[1,2,3], div_id_2: ['abc','def']}}
request_json = {"filter":{div_id_2: ['abc','def']}}
预期输出:
request_json = {"filter":""};
// I was updating it like(some where in script)..
request_json.filter = {div_id_1:[1,2,3]};
// Second time updating(some another place in script) is not working
request_json.filter = {div_id_2: ['abc','def']}; //not working.
request_json = {"filter":{div_id_1:[1,2,3], div_id_2: ['abc','def']}}
request_json = {"filter":{div_id_2: ['abc','def']}}
实际输出:
request_json = {"filter":""};
// I was updating it like(some where in script)..
request_json.filter = {div_id_1:[1,2,3]};
// Second time updating(some another place in script) is not working
request_json.filter = {div_id_2: ['abc','def']}; //not working.
request_json = {"filter":{div_id_1:[1,2,3], div_id_2: ['abc','def']}}
request_json = {"filter":{div_id_2: ['abc','def']}}
已尝试:(不工作)
如何更新此文件?JSON
首先是一个小音符。使用“JSON”来引用任意JS对象,即使人们知道你的意思,你也会在这里遇到很多麻烦。JSON是一种字符串格式,用于表示系统之间传递的数据对象。它不是对象格式本身。因此,我将使用下面的“request”
,而不是“request\u json”
为什么你的代码不起作用
request={filter:'};
// ... 后来
request.filter={div_id_1:[1,2,3]};
// ... 后来还是
request.filter={div_id_2:['abc','def']};
在每个步骤中,设置对象的filter
值。在第一行,将其设置为空字符串。在第二行将其设置为对象{div_id_1:[1,2,3]}
,在第三行将其设置为对象{div_id_2:['abc',def']}
。您从未告诉它将这些对象合并为一个。如果这是你想要它做的,你需要告诉它
最简单的解决方法
只需更改第三行,即可使用新属性更新过滤器对象:
request={filter:'};
// ... 后来
request.filter={div_id_1:[1,2,3]};
// ... 后来还是
request.filter.div_id_2=['abc','def'];
如果您知道行将始终按此顺序运行,并且这就是使用过滤器所需的全部操作,那么这将很好地工作
多次更新
但是,如果您的问题更一般,例如,如果您希望能够多次更新过滤器,但不确定哪一个可以先更新,那么编写一个函数来处理过滤器是否已经存在以及是否是对象的测试可能会有所帮助
可能是这样的:
const addToFilter=(请求、键、值)=>
request.filter=Object.assign(request.filter | |{},{[key]:val})
常量请求={filter:'}
// ... 后来
addToFilter(请求'div_id_1',[1,2,3])
// ... 后来还是
addToFilter(请求'div_id_2',['abc','def'])
console.log(request)
您是否可以更新您的预期结果和您得到的结果,甚至您得到的任何错误。您发布的此代码将起作用。如果有错误,那么我们不能在这里看到它。可能是因为第三行在第二行或第一行之前运行。@请检查。我已经用我在代码中的确切方式更新了这个问题。request_json.filter.div_id_2=['abc','def']
@NotABot我已经将request_json={“filter”:“}
更改为request_json={“filter”:{}
,现在一切正常!