Node JSON Transform Demo

by Aditya Sharma

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
<html>

  <head>
    <script>
      DataTransform = function(data, map) {
        return {
          defaultOrNull: function(a) {
            return a && map.defaults ? map.defaults[a] : void 0
          },
          getValue: function(b, a, c) {
            if (void 0 !== b) {
              if ("" == a || void 0 == a) return b;
              var d = b || data;
              return "" == (a = a || map.list) ? "" : _.get(d, a, this.defaultOrNull(c))
            }
          },
          setValue: function(e, c, f) {
            if (void 0 !== e && "" != c && void 0 != c && "" != c)
              for (var b = c.split("."), d = e, a = 0; a < b.length; a++) {
                if (a === b.length - 1) {
                  d[b[a]] = f;
                  return
                }
                if (!(b[a] in d)) return;
                d = d[b[a]]
              }
          },
          getList: function() {
            return this.getValue(data, map.list)
          },
          transform: function(d) {
            var b, c = void 0 != map.list;
            c ? b = this.getValue(data, map.list) : _.isArray(data) && !c ? b = data : _.isObject(data) && !c && (b = [data]);
            var a = [];
            if (!_.isEmpty(b)) {
              var e = c ? this.getList() : b;
              a = map.item ? _.map(e, _.bind(this.iterator, this, map.item)) : e, a = _.bind(this.operate, this, a)(d), a = this.each(a, d), a = this.removeAll(a)
            }
            return !c && _.isObject(data) && !_.isArray(data) ? a[0] : a
          },
          transformAsync: function(a) {
            return new Promise((function(b, c) {
              try {
                b(this.transform(a))
              } catch (d) {
                c(d)
              }
            }).bind(this))
          },
          removeAll: function(a) {
            return _.isArray(map.remove) ? _.each(a, this.remove) : a
   ...

JavaScript

var transform = function(data, map, context) {
	var dataTransform = new DataTransform(data, map)
	return dataTransform.transform(context);
}// or
//var { transform } = require("node-json-transform");

var result = transform({  
  text: "hello"
}, {
  item: {
    message: "text"
  }
});

var data = {
  title : "title1",
  description: "description1",
  blog: "This is a blog.",
  date: "11/4/2013",
  extra : {
    link : "http://goo.cm"
  },
  list1:[
    {
      name:"mike"
    }
  ],
  list2:[
    {
      item: "thing"
    }
  ],
  clearMe: "text"
};

var map = {
  item: {
    name: "title",
    info: "description",
    text: "blog",
    date: "date",
    link: "extra.link",
    item: "list1.0.name",
    clearMe: "",
    fieldGroup: ["title", "extra"]
  },
  operate: [
    {
      run: "Date.parse", on: "date"
    },
    {
     run: function(val) { return val + " more info"}, on: "info"
    }
  ],
  each: function(item){
    item.iterated = true;
    return item; 
  }
};
result = transform(data, map);

console.log("result", result)
document.getElementById("results").innerHTML = JSON.stringify(result)