/ember-json-mapper

Small mapper for JSONs. It allows you to convert one object to another with minimal effort.

Primary LanguageJavaScriptMIT LicenseMIT

Ember JSON Mapper

What is it?

Small mapper for JSONs. It allows you to convert one object to another with minimal effort.

Installing

bower i ember-json-mapper

Usage examples

Basic

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

Nested objects

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 }

Nested keys

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 } }

Nested objects and nested keys

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

Objects as keys

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

With default value

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 }

Set value without mapping from source

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

Custom getter

var map = { a: 'a', 'b': { custom: function (source) {
  return Ember.get(source, 'b.c') + 1;
} } };
var source = { a: 1, b: { c: 2 } };
var mapped = Ember.JsonMapper.map(source, map); // { a: 1, b: 3 }

Array-properties mapping

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} ] }

Multi-nesting

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 } ] } ] }

Custom getter for nested objects

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