1

取得した JSON オブジェクトに基づいて入力フィールドに入力しようとしています。私のフォームのフィールド名は次のようになります。

  1. フルネーム
  2. account.enabled
  3. 国.XXX.XXXX

関数は、上記のフィールドに対して以下のようなものを返す必要があります

  1. aData["フルネーム"]
  2. aData["アカウント"]["有効"]
  3. aData["国"]["XXX"]["XXXX"]

指定された HTML フィールドの名前に一致する JSON エントリを返す関数をどのように記述すればよいですか?

4

2 に答える 2

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
于 2013-09-18T16:45:58.397 に答える
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());
于 2013-09-18T16:53:19.007 に答える