javascript对象封装后转换为json

  之前写了一个在Object原型加上一个转换json的工具,有一些bug和瑕疵在里面,而且改变Object的原型不是一个好的做法。

  正好项目中有要用到,所以就重新写了一个我们项目所需要的结构来进行转换。

  下载地址:http://download.csdn.net/download/w172087242/9600079

  建议使用Google浏览器进行测试,插件支持所有主流浏览器


 首先是ywkj-util.js


 

/**
 * Created by littlehow on 2016/8/9 0009.
 * @author littlehow
 */
var YWKJ = {};
/** util命名空间 */
YWKJ.util = {};

/** 字符串连接 */
YWKJ.util.StringBuffer = function(){
    this._value = [];
    this.add = this.append = function(s) {
        this._value.push(s);
        return this;
    }
    this.removeAdd = this.removeAppend = function() {
        this._value.pop();
        return this;
    }
    this.valueOf = this.toString = function(split) {
        return this._value.join(split || "");
    }
    this.getAddCnt = this.getAppendCnt = function(){
        return this._value.length;
    }
    this.empty = this.clear = function(){
        this._value = [];
        return this;
    }
    this.length = function(){
        return this.toString().length;
    }
}

/** 获取对象toString */
YWKJ.util.getString = function(obj) {
    if (obj === undefined || obj === null) return null;
    if(typeof obj == "string"){
        return '"' + obj + '"';
    } else if(typeof obj == "date"){
        return obj.getTime();
    } else {
        return obj;
    }
}

/** 获取对象的jsonString */
YWKJ.util.forJsonString = function(obj) {
    if(obj === undefined || obj === null) return null;
    if(typeof obj == "function") return "{}";
    var sb = new this.StringBuffer();
    if(obj.constructor == Array) {//处理数组
        if(obj.length == 0) return "[]";
        sb.add("[");
        for(var i = 0, len = obj.length; i < len; i++){
            var v = obj[i];
            if(typeof v == "object") v = this.forJsonString(v);
            else v = this.getString(v);
            sb.add(v).add(", ");
        }
        if(sb.getAddCnt() > 1) sb.removeAdd();
        return sb.add("]").toString();
    }else if(typeof obj == "object"){
        sb.add("{");
        for(var i in obj){
            var v = obj[i];
            if(v === undefined || v === null) continue;
            var type = typeof v;
            if(type == "function"){
                continue;
            } else{
                if(typeof v == "object") v = this.forJsonString(v);
                else v = this.getString(v);
                sb.add('"').add(i).add('" : ').add(v).add(", ");
            }
        }
        if(sb.getAddCnt() > 1) sb.removeAdd();
        return sb.add("}").toString();
    } else {
        return null;
    }
}

然后是实体类空间ywkj-pojo.js


/**
 * pojo.js file
 * @author littlehow
 * @time 2016-08-09 10:17
 * @dependence ywkj-util.js
 */
/** pojo命名空间 */
YWKJ.pojo = {};

YWKJ.pojo.ParentFunctionBean = function(){
    this.toJson = function() {
        return YWKJ.util.forJsonString(this);
    }
}


最后是bean空间ywkj-pojo-report.js


/**
 * @author littlehow
 * @time 2016-08-09 11:55
 * @dependence ywkj-pojo.js
 */
/** package report */
YWKJ.pojo.report = {
    p : YWKJ.pojo
};
/** 浅继承 */
YWKJ.pojo.report.extendFunc = function(son, parent) {
    for(var i in parent) {
        if(!son.prototype[i]) {//不存在则可以继承
            son.prototype[i] = parent[i];
        }
    }
}

YWKJ.pojo.report.extendsAll = function() {
    var parent = new this.p.ParentFunctionBean();
    this.extendFunc(this.ReportBase, parent);
    this.extendFunc(this.Column, parent);
    this.extendFunc(this.Param, parent);
    this.extendFunc(this.ReportBean, parent);
    this.extendFunc(this.Template, parent);
    this.extendFunc(this.Sql, parent);
}

/**
 * 方法继承bean
 * @constructor
 */
YWKJ.pojo.report.ParentFunctionBean = function(){
    this.toJson = function() {
        return YWKJ.util.forJsonString(this);
    }
}

/**
 * 报表基础信息
 * @param reportName
 * @param userId
 * @param userName
 * @param useFlag
 * @param platform
 * @constructor
 */
YWKJ.pojo.report.ReportBase = function(reportName, userId, userName, useFlag, platform) {
    this.reportName = reportName;
    this.createUserid = userId;
    this.createUser = userName;
    this.useState = useFlag;
    this.updateUserid = null;
    this.updateUser = null;
    this.id = null;
    this.platform = platform;
}

/**
 * 参数信息
 * @param name
 * @param desc
 * @param code
 * @param type
 * @param map
 * @param _default
 * @constructor
 */
YWKJ.pojo.report.Param = function(name, desc, code, type, map, _default){
    this.paramName = name;
    this.paramDesc = desc;
    this.paramCode = code;
    this.paramType = type;
    this.paramMap = map;
    this.paramDefault = _default;
    this.operType = null;
    this.id = null;
}

/**
 * 展示字段信息
 * @param code
 * @param name
 * @param note
 * @constructor
 */
YWKJ.pojo.report.Column = function(code, name, note){
    this.columnCode = code;
    this.columnName = name;
    this.note = note;
    this.operType = null;
}

/**
 * 语句信息
 * @param sql
 * @param id
 * @constructor
 */
YWKJ.pojo.report.Sql = function(sql, id) {
    this.sql = sql;
    this.id = id;
}

/**
 * 模板信息pojo
 * @param content
 * @param sql
 * @param params
 * @param columns
 * @constructor
 */
YWKJ.pojo.report.Template = function(name, type, code, content, sql, soutNum, params, columns) {
    this.templateName = name;
    this.templateType = type;
    this.templateCode = code;
    this.content = content;
    this.sqlInfo = sql;
    this.soutNum = soutNum;
    this.params = params;
    this.columns = columns;
    this.operType = null;
    this.id = null;
}

/**
 * 报表信息
 * @param base
 * @param templates
 * @constructor
 */
YWKJ.pojo.report.ReportBean = function(base, templates) {
    this.base = base;
    this.templates = templates;
}

/**
 * 执行继承
 */
YWKJ.pojo.report.extendsAll();


调用html代码:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>report json test</title>
  <script type="text/javascript" src="../js/ywkj-util.js"></script>
  <script type="text/javascript" src="../js/ywkj-pojo.js"></script>
  <script type="text/javascript" src="../js/ywkj-pojo-report.js"></script>
 </head>
 <body>
	<div id="mydiv" style="width:600px;background-color:black;color:orange;"></div>
 </body>
 <script type="text/javascript">
	 var $ = YWKJ.pojo.report;
	 var columns = [new $.Column("userid","用户id","登录者"), new $.Column("userid","用户id","登录者")];
	 columns[0].operType = "2";
	 columns[1].operType = "1";
	 var params = [new $.Param("用户id", "用户id", "string1", "string", "userid", "171")];
	 params[0].operType = "3";
	 params[0].id = 777;
	 var templates = [new $.Template("用户增长曲线图", "散点图", "x001", "这是是示例模板, 欢迎光临 ${userid}", new $.Sql("select * from user_info where userid=#{string1}", 133), 0, params, columns)];
	 templates[0].operType = "2";
	 templates[0].id = 168;
	 var base = new $.ReportBase("用户浏览报表", null, null, false, "终端宝");
	 base.updateUserid = "18561561";
	 base.updateUser = "陈浩南";
	 var report = new $.ReportBean(base, templates);
	 console.log(report.toJson());
	 console.log(base.toJson());
	 console.log(templates[0].toJson());
	 document.getElementById("mydiv").innerHTML = report.toJson();
	 console.log((new $.ReportBean()).toJson());
  </script>
</html>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值