Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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开始节点的树。这是一个例子 var myData = { name : 'Dan', address: { city : 'Santa Clara', details : { 'prevhouse' : '' } } } 该函数的输入是一个键树。例如,myData地址详细

我想写一个函数,它可以根据一个键查找一个值,并用另一个值替换该值。该键是来自JSON开始节点的树。这是一个例子

var myData = {
    name : 'Dan',
    address: {
        city : 'Santa Clara',
                details : {
                   'prevhouse' : ''
                }
    }
}
该函数的输入是一个键树。例如,myData地址详细信息prevhouse

当我用一个新值传递这个键时,比如“Texas”,prevhouse值将更改为我发送的新值

新的JSON将

var myData = {
    name : 'Dan',
    address: {
        city : 'Santa Clara',
                details : {
                   'prevhouse' : 'Texas'
                }
    }
}
这是我到目前为止写的

var tree = key.split("-");
现在树变量包含[“myData”、“address”、“details”、“prevhouse”]

我知道我们可以使用myData[tree[0]][tree[1]][tree[2]]访问该对象,但不知何故无法从解析的值中动态获取它

由于深度的长度直到运行时才知道,我们如何动态地生成它


希望能得到帮助。

鉴于对象是
myData
,我认为您应该使用
myData[tree[1]][tree[2]][tree[3]
并丢弃数组中的第一项

类似的东西应该是递归的(未经测试)


考虑到对象是
myData
,我认为您应该使用
myData[tree[1]][tree[2]][tree[3]]
并丢弃数组中的第一项

类似的东西应该是递归的(未经测试)


您应该能够遍历每个键,因为您的JSON只是一个JS对象。因此,检查每个键,检查它是否已定义,如果已定义,则使用该对象进行下一次检查。这会让你到达你想去的地方。请记住,您将为您的值设置最后一个键

不处理设置的基本psuedo代码:

obj = data;
for (key in keys) {
  obj = obj[key]
}

您应该能够遍历每个键,因为您的JSON只是一个JS对象。因此,检查每个键,检查它是否已定义,如果已定义,则使用该对象进行下一次检查。这会让你到达你想去的地方。请记住,您将为您的值设置最后一个键

不处理设置的基本psuedo代码:

obj = data;
for (key in keys) {
  obj = obj[key]
}

这样做可以:

function update(node, path, value) {
  path = path.split('-');
  do {
    node = node[path.splice(0, 1)];
  } while(path.length > 1);
  node[path[0]] = value;
}

这样做可以:

function update(node, path, value) {
  path = path.split('-');
  do {
    node = node[path.splice(0, 1)];
  } while(path.length > 1);
  node[path[0]] = value;
}
请尝试使用以下代码:

    var myData = {
        name: 'Dan',
        address: {
            city: 'Santa Clara',
            details: {
                prevhouse: ''
            }
        }
    };


    function setAttribute(obj, key, value) {
        var i = 1,
            attrs = key.split('-'),
            max = attrs.length - 1;

        for (; i < max; i++) {
            attr = attrs[i];
            obj = obj[attr];
        }

        obj[attrs[max]] = value;
        console.log('myData=', myData);

    }

    setAttribute(myData, "myData-address-details-prevhouse", "Texas");
var myData={
名字:“丹”,
地址:{
城市:“圣克拉拉”,
详情:{
上议院:''
}
}
};
函数setAttribute(对象、键、值){
var i=1,
attrs=key.split('-'),
最大值=属性长度-1;
对于(;i