如何使用data ['file.file']访问JSON?

时间:2013-11-20 18:02:24

标签: javascript json

我可以使用var x = data.file.file查询我的数据;但是,我将file.file作为字符串,data ['file.file']失败。有没有办法做到这一点,还是我需要拆分字符串并以递归方式行走?

2 个答案:

答案 0 :(得分:1)

data['file.file']指向名为'file.file'的数据属性,而data.file.file指向数据属性文件的属性文件。

使用data['file']['file']来获得与data.file.file

相同的访问权限

更新

当然,您必须拆分字符串才能使用多数组访问方法。在你的情况下,这可能是:

var path = 'file.file'
var pathElems = path.split('.')

// access field
data[pathElems[0]][pathElems[1]]

答案 1 :(得分:1)

不使用eval(你绝对应该避免),你必须拆分字符串。这样的事应该可以正常工作:

var data = {
  file: {
    file: 'YAY'
  }
};

getProp(data, 'file.file'); // "YAY"
setProp(data, 'file.newprop.blop', 7); // false
setProp(data, 'file.newprop', {}); // true
setProp(data, 'file.newprop.blop', 7); // true
console.log(data); // {file: {file: "YAY", newprop: {blop: 7}}}

function getProp(obj, path){
  var parts = path.split('.'), u, i;
  for(i = 0; i < parts.length; i++){
    obj = obj[parts[i]];
    if(obj === u) return u;
  }
  return obj;
}

function setProp(obj, path, newValue){
  var parts = path.split('.'), u, i;
  for(i = 0; i < parts.length - 1; i++){
    obj = obj[parts[i]];
    if(obj === u) return false;
  }
  obj[parts[i]] = newValue;
  return true;
}