如何动态访问嵌套的Json对象

时间:2013-09-18 16:39:50

标签: javascript

我正在尝试根据检索到的JSON对象填充输入字段。我表单中的字段名称类似于:

  1. 全名
  2. account.enabled
  3. country.XXX.XXXX
  4. 对于上述字段,该函数应返回类似下面的内容

    1. ADATA [ “全名”]
    2. ADATA [ “帐户”] [ “启用”]
    3. ADATA [ “国家”] [ “XXX”] [ “XXXX”]
    4. 我应该如何编写一个返回给定HTML字段名称的匹配JSON条目的函数?

2 个答案:

答案 0 :(得分:2)

你可以使用附加的方法,它将递归地查找JSON对象中的给定路径,如果没有匹配则将回退到默认值(def)。

var get = function (model, path, def) {
    path = path || '';
    model = model || {};
    def = typeof def === 'undefined' ? '' : def;
    var parts = path.split('.');
    if (parts.length > 1 && typeof model[parts[0]] === 'object') {
      return get(model[parts[0]], parts.splice(1).join('.'), def);
    } else {
      return model[parts[0]] || def;
    }
  } 

你可以这样称呼它:

get(aData, 'country.XXX.XXXX', ''); //traverse the json object to get the given key

答案 1 :(得分:1)

迭代表单元素,获取其名称,拆分为“。”,然后访问JSON对象?

类似的东西:

var getDataValueForField = function (fieldName, data) {
  var namespaces = fieldName.split('.');
  var value      = "";
  var step       = data;

  for (var i = 0; i < namespaces.length; i++) {
    if (data.hasOwnProperty(namespaces[i])) {
      step = step[namespaces[i]];
      value = step;
    } else {
      return (""); // safe value
    }
  }
  return (value);
};

var populateFormFields = function (formId, data) {
   var fields = document.querySelectorAll('#' + formId + ' input');

   for (var i = 0; i < fields.length; i++) {
     fields[i].value = getDataValueForField(fields[i].name, data);
   }
};

populateFormFields('myForm', fetchedFromSomeWhere());