通过将键顺序作为字符串路径JSON来获取值

时间:2014-03-07 07:28:44

标签: javascript json

有没有办法获得

的价值
{
    "first": "first-string",
    "second-array": [
        {
           "first-Obj": 2
        }
     ]
}

有没有办法通过使用类似字符串

的路径来获取或更新值
ex: to change the first-obj's value to 1000
    changeTheValueAt('second-array/0/firstObj', 1000)

是否有任何类似上述changeTheValueAt或方法的函数。

2 个答案:

答案 0 :(得分:5)

使用以下功能 -

function changeTheValueAt(obj, path, value) {
    var parts = path.split("/"),
        final = obj[parts[0]],
        i;

    for (i = 1; i < parts.length; i++) {
        if (i + 1 < parts.length) {
            final = final[parts[i]];
        }
        else {
            final[parts[i]] = value;
        }
    }
}

然后像这样调用它 -

var ob = {
    "first": "first-string",
    "second-array": [
        {
            "first-Obj": 2
        }
    ]
};

changeTheValueAt(ob, "second-array/0/first-Obj", 1000)

alert(ob["second-array"][0]["first-Obj"]);

JSFiddle Demo

答案 1 :(得分:-3)

由于第二个数组是一个数组,因此无法按名称访问它。您可以通过索引访问它,也可以迭代并查找值并在找到时进行更改。

var yourObj = {
   "first": "first-string",
   "second-array": [
      {
         "first-Obj": 2
      }
    ]
};

yourObject.second-array[0].first-Obj = 1000;

您可以执行以下操作:

var changeFirstObj = function(node1, node2, new val){
   yourObj[node1].forEach(o, i){
     for(var prop in o){
       if(prop == node2){
          o[node2]=newVal;
        }
   };

   changeFirstObj('second-array', 'first-Obj', 1000);  

但那不是很灵活。