Javascript 使用单个可重用函数动态更改深嵌套JSON值
我有一个JSON,我正在尝试更改其中的值Javascript 使用单个可重用函数动态更改深嵌套JSON值,javascript,json,object,Javascript,Json,Object,我有一个JSON,我正在尝试更改其中的值 { 字符串:“嗨”, 编号:0, 布尔值:false, 对象:{ 子字符串:“你好”, 子编号:1, 亚布尔值:真, 子对象:{ 子字符串:“你好,世界” }, 子阵列:[“-1”、“-2”、“-3”] }, 数组:[“1”、“2”、“3”] } 我有一段代码,它接受一个带有JSON键的字符串和一个新值(例如“object.subNumber”,5),我试图让它设置对象中的子编号值({…object:{…subNumber:5…}}),但我无法让它工作
{
字符串:“嗨”,
编号:0,
布尔值:false,
对象:{
子字符串:“你好”,
子编号:1,
亚布尔值:真,
子对象:{
子字符串:“你好,世界”
},
子阵列:[“-1”、“-2”、“-3”]
},
数组:[“1”、“2”、“3”]
}
我有一段代码,它接受一个带有JSON键的字符串和一个新值(例如“object.subNumber”,5),我试图让它设置对象中的子编号值({…object:{…subNumber:5…}}
),但我无法让它工作
这是我试过的
var keys=args[0]。拆分(“.”)
var值=args[1]
var configKey=config
keys.forEach(key=>{configKey=configKey[key]})
configKey=value
这不管用。有什么方法可以做到这一点吗?我对您的方法很感兴趣,并提出了这个可伸缩的json深层属性编辑函数。这将返回原始json的副本
let orig_json={
字符串:“嗨”,
编号:0,
布尔值:false,
对象:{
子字符串:“你好”,
子编号:1,
亚布尔值:真,
子对象:{
子字符串:“你好,世界”
},
子阵列:[“-1”、“-2”、“-3”]
},
数组:[“1”、“2”、“3”]
}
函数changeValue(对象路径、值、json){
let keys=obj_path.split(“.”)
让obj={…json
},
tmpobj={},
prevobj={}
对于(设x=keys.length-1;x>=0;x--){
如果(x==0){
obj[键[0]]=tmpobj
}否则{
让toeval='json.'+keys.slice(0,x).join('.');
prevobj={…tmpobj
}
tmpobj=评估(toeval);
如果(x==keys.length-1)tmpobj[keys[x]]=value
否则{
tmpobj[keys[x]]=prevobj
}
}
}
返回obj
}
让newjson=changeValue(“object.subObject.subSubString”,“再见世界”,orig_json);
console.log(newjson)
您的迭代太远了。您必须在最后一项之前停止:
function propertySetter(property, value) {
var object = {
string: "Hi",
number: 0,
boolean: false,
object: {
subString: "Hello",
subNumber: 1,
subBoolean: true,
subObject: {
subSubString: "Hello World"
},
subArray: ["-1", "-2", "-3"]
},
array: ["1", "2", "3"]
};
var keys = property.split(".");
var propertyName = keys.pop();
var propertyParent = object;
while (keys.length > 0) {
propertyParent = propertyParent[keys.shift()];
}
propertyParent[propertyName] = value;
console.log("Modified object", object);
}
要进行测试,请在显示您尝试的代码上调用
propertySetter(“object.subNumber”,5)
,您能否将整个函数、示例输入和所需输出放入其中?foreach的最后一次迭代复制了一个基元,您可以使用此自定义函数let updateNestedValueOfObj=(数据、字符串、值)=>{let tempObj=data;//对obj const fieldList=string.split(.“”);const len=fieldList.length;for(var i=0;i
data=updateNestedValueOfObj(data,“object.subNumber”,5)只需将您的字符串和数据一起传递,然后查看npm包对象扫描。它是为此而设计的。免责声明:我是作者