Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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
Javascript 使用单个可重用函数动态更改深嵌套JSON值_Javascript_Json_Object - Fatal编程技术网

Javascript 使用单个可重用函数动态更改深嵌套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…}}),但我无法让它工作

我有一个JSON,我正在尝试更改其中的值

{
字符串:“嗨”,
编号: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包对象扫描。它是为此而设计的。免责声明:我是作者