Ember JSON Mapper

Bower-модуль доступен на GitHub.

Судя по названию, это небольшая библиотека (аж на одну функцию 🙂 ), при помощи которой можно из одного json’a сделать другой. Простой пример:

var map = { a: 'a', c: 'b' };
var source = { a: 1, b: 2 };
var mapped = Ember.JsonMapper.map(source, map); // { a: 1, c: 2 }

Как видно функция map принимает два параметра — исходный json и json-карту, где указанно какое поле из старого объекта будет в новом и под каким именем. Само собой, что поддерживается вложенность:

var map = { a: 'a', d: 'b.c' };
var source = { a: 1, b: { c: 2 } };
var mapped = Ember.JsonMapper.map(source, map); // { a: 1, d: 2 }
var map = { a: 'a', 'd.e': 'b' };
var source = { a: 1, b: 2 };
var mapped = Ember.JsonMapper.map(source, map); // { a: 1, d: { e: 2 } }

На случай, если в исходном json’е какого-то поля может не быть, то в map’e можно указать default-значение (key — поле в исходном объекте):

var map = { a: 'a', c: { key: 'b', default: 3 } };
var source = { a: 1, b: 2 };
var mapped = Ember.JsonMapper.map(source, map); // { a: 1, c: 2 }

Если же в новом объекте надо сделать какое-то поле с предопределенным значением, то тоже используется default, но без key:

var map = { a: 'a', c: { default: 3 } };
var source = { a: 1, b: 2 };
var mapped = Ember.JsonMapper.map(source, map); // { a: 1, c: 3 }

Массивы тоже можно «маппить»:

var map = { a: 'a', d: { key: 'b', map: { c: 'c' } } };
var source = { a: 1, b: [
  {c: 1, d: 1},
  {c: 2, d: 2}
] };
var mapped = Ember.JsonMapper.map(source, map); // { a: 1, d: [ {c: 1}, {c: 2} ] }
var map = { a: 'a', d: { key: 'b', map: { c: 'c', f: { default: 2 } } } };
var source = { a: 1, b: [
  {c: 1, d: 1},
  {c: 2, d: 2}
] };
var mapped = Ember.JsonMapper.map(source, map); // { a: 1, d: [ {c: 1, f: 2}, {c: 2, f: 2} ] }
var map = { a: 'a', d: { key: 'b', map: { c: 'c', v: { key: 'd', map: { e1: 'e', f1: 'f' } } } } };
var source = { a: 1, b: [
  {c: 1, d: [
    { e: 3, f: 4 }
  ] },
  {c: 2, d: [
    { e: 5, f: 6 }
  ] }
] };
var mapped = Ember.JsonMapper.map(source, map); // { a: 1, d: [ {c: 1, v: [ { e1: 3, f1: 4 } ] }, {c: 2, v: [ { e1: 5, f1: 6 } ] } ] }

Исходники — GitHub.

, ,

Оставить комментарий

Top ↑ | Main page | Back