code: function (json, callback) {
      if (!json) return;
  
      var serialized = JSON.parse(json);
      if (!serialized || (serialized && !serialized.objects)) return;
  
      this.clear();
      var _this = this;
      this._enlivenObjects(serialized.objects, function () {
        _this.backgroundColor = serialized.background;
  
        if (serialized.backgroundImage) {
          _this.setBackgroundImage(serialized.backgroundImage, function() {
  
            _this.backgroundImageOpacity = serialized.backgroundImageOpacity;
            _this.backgroundImageStretch = serialized.backgroundImageStretch;
  
            _this.renderAll();
  
            callback && callback();
          });
        }
        else {
          callback && callback();
        }
      });
  
      return this;
    }
docs: Populates canvas with data from the specified JSON
  JSON format must conform to the one of `fabric.Canvas#toJSON`
  @method loadFromJSON
  @param {String} json JSON string
  @param {Function} callback Callback, invoked when json is parsed
  and corresponding objects (e.g: fabric.Image)
  are initialized
  @return {fabric.Canvas} instance
  @chainable