Atitit.atijson 类库的新特性设计与实现 v3 q31

1. V1版本---集成了多引擎1

2. V2版本新特性 --bsh脚本化2

3. V3版本新特性---循环引用解决使用fastjson2

4. prob目前jsonlib库的存在的问题,2

4.1. 可能版本冲突,抛出ex2

4.2. 多个json类库编译需求jar ,需要同时具备多个json jar类库才可编译成功。。麻烦2

4.3. 循环引用的解决2

5. solu解决之道:2

5.1. 自定义json解析库,使用多个复合的json 解析复合的引擎2

5.2. 循环引用暂时使用fastjson解决,最终要限制level解决2

5.3. 脚本化,防止编译问题的 出现3

6. 几个要点3

6.1. 复合结构的转换3

6.2. 没有get set方法的属性自动忽略,而不抛出异常3

6.3. 时间格式的转换3

6.4. Api使用json lib的,以及gson的也一个3

6.5. 如果要将泛型转换成json, 3

7. 普通的的json解析器 Jackson类库 Google Gson JSON-lib类库4

8. Api4

8.1. toJson       xxx.fromObject(x).toString(2)4

8.2. 字符串转成对象   T fromJson(String str, Class<T> type)  fromObject(object)4

9. Teste code4

10. 参考6

1. V1版本---集成了多引擎

2. V2版本新特性 --bsh脚本化

使用了bsh脚本化防止编译错误

3. V3版本新特性---循环引用解决使用fastjson

Fastjson版本放在第一解析器序列

4. prob目前jsonlib库的存在的问题,

4.1. 可能版本冲突,抛出ex

4.2. 多个json类库编译需求jar ,需要同时具备多个json jar类库才可编译成功。。麻烦

4.3. 循环引用的解决

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

5. solu解决之道:

5.1. 自定义json解析库,使用多个复合的json 解析复合的引擎

5.2. 循环引用暂时使用fastjson解决,最终要限制level解决

通过反射,变成map,限制层数解决

5.3. 脚本化,防止编译问题的 出现

6. 几个要点

6.1. 复合结构的转换

6.2. 没有get set方法的属性自动忽略,而不抛出异常

6.3. 时间格式的转换

6.4. Api使用json lib的,以及gson的也一个

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

6.5. 如果要将泛型转换成json,

1、如,一个Map是这样的,Map<String, Map<String, List<String>>> map,如果这样使用gson.toJson(map)得不到正确的结果的话,那么,我们可能要这样使用,gson.toJson(map,new TypeToken<Map<String, Map<String, List<String>>>>(){}.getType())。

解决方案:

  1、如果涉及到关联属性的对象,转换前可以先把它的关联属性转换并放入一个新建的Map或者List,然后按照层次结构重复这样的操作一层一层的往上转,这样,一般可以解决问题,但是,如果关联的层次比较深,做起来就很麻烦了。上面提到的问题3就可以用这种方式解决。

7. 普通的的json解析器 Jackson类库 Google Gson JSON-lib类库

8. Api

8.1. toJson       xxx.fromObject(x).toString(2)

8.2. 字符串转成对象   T fromJson(String str, Class<T> type)  fromObject(object)

9. Teste code

package com.attilax.json;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import com.attilax.core;

import com.google.gson.Gson;

public class JSONObject {

public JSONObject(Map m) {

this.obj = m;

}

public static void main(String[] args) {

Map m = new HashMap();

m.put("d", new Date());

// m.put(key, value)

JSONObject.fromObject(m).toString(2);

}

private String toString(int i) {

// if(i==2) //fmt

{

try {

return net.sf.json.JSONObject.fromObject(this.obj).toString(i);

} catch (Exception e) {

try {

// 创建一个gson对象

Gson gson = new Gson();

// 转换成json

String json = gson.toJson(this.obj);

return json;

} catch (Exception e2) {

return JsonUtil4jackjson.buildNormalBinder().toJson(

this.obj);

}

}

}

}

public Object obj;

private static JSONObject fromObject(Map m) {

// TODO Auto-generated method stub

return new JSONObject(m);

}

}

10. 参考

Atitit.序列化循环引用解决方案json

Atitit.atijson 类库的新特性设计与实现 v3 q31的更多相关文章

  1. Atitit  DbServiceV4qb9 数据库查询类库v4 新特性

    Atitit  DbServiceV4qb9 数据库查询类库v4 新特性     V4新特性 安全特性,屏蔽了executeUpdate,使用v2版 Sql异常转换,特别转换了DuplicateEnt ...

  2. Atitit mac os 版本 新特性 attilax大总结

    Atitit mac os 版本 新特性 attilax大总结 1. Macos概述1 2. 早期2 2.1. Macintosh OS (系统 1.0)  1984年2 2.2. Mac OS 7. ...

  3. Atitit .c#的未来新特性计划草案

    Atitit .c#的未来新特性计划草案 1. C#的未来:追踪空引用1 1.1. 2. 变量命名空间1 1.2. 10. 项目引用Native dll2 1.3. 10. 项目引用Native dl ...

  4. atitit.ntfs ext 文件系统新特性对比

    atitit.ntfs ext 文件系统新特性对比 1. 现代文件系统应该有的特性2 1.1. 恢复Log2 1.2. 压缩2 1.3. Meta ext2 1.4. Fulltextཟsearch  ...

  5. Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39

    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39 V8   重构iocutilV4,use def iocFact...jettyUtil V ...

  6. Atitit. Atiposter 发帖机 新特性 poster new feature v11  .docx

    Atitit. Atiposter 发帖机 新特性 poster new feature v11  .docx 1.1.  版本历史1 2. 1. 未来版本规划2 2.1. V12版本规划2 2.2. ...

  7. Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39

    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39 V1  初步实现sina csdn cnblogs V2  实现qzone sohu 的发帖 ...

  8. Atitit hibernate3 hinernate4 hibernate5新特性attilax总结

    Atitit hibernate3 hinernate4 hibernate5新特性attilax总结 1.1. Hibernate3的新特性 1 1.2. hibernate4.1版本中的新特性和h ...

  9. Atitit js es5 es6新特性 attilax总结

    Atitit js es5 es6新特性 attilax总结 1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 ...

随机推荐

  1. codeforces 713C C. Sonya and Problem Wihtout a Legend(dp)(将一个数组变成严格单增数组的最少步骤)

    E. Sonya and Problem Wihtout a Legend time limit per test 5 seconds memory limit per test 256 megaby ...

  2. vector,list.queue,array.....

    vector 这个我们最熟悉了,也可能是我们用的最多的容器之一了. 我们可以用vector来模拟栈,vector的push_back和pop_back效率很高,时间复杂度是常数. 由于他是一个连续的内 ...

  3. SSH框架的简单含义

    典型的J2EE三层结构,分为表现层.中间层(业务逻辑层)和数据服务层.三层体系将业务规则.数据访问及合法性校验等工作放在中间层处理.客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与 ...

  4. 【并查集】【set】AtCoder - 2159 - 連結 / Connectivity

    Problem Statement There are N cities. There are also K roads and L railways, extending between the c ...

  5. 1.4(java学习笔记) 面向对象内存分析

      首先介绍几个概念 栈: 1.栈是方法执行的内存模型,每调用一个方法都会创建一个栈帧. 2.jvm为每个线程创建一个栈,存放方法相关信息,栈属于线程私有不共享. 3.栈由系统自动分配,是连续的内存空 ...

  6. YS端对端之间SSL通信安全问题

    1.简介:          传统的互联网,SSL通信主要基于客户端和服务器之间,在物联网时代,端和端之间的加密通信将变得很普遍,在YS业务中主要的端和端通信为: (1).客户端(移动APP,YS工作 ...

  7. DataRow 数组转化成DataTable

    #region 封装DataTable DataTable dt = null; if (newRows.Length > 0) { dt = newRows[0].Table.Clone(); ...

  8. TSynDBDataSet内存表

    TSynDBDataSet内存表 SynDBMidasVCL.pas TSynDBDataSet = class(TCustomClientDataSet) Props := TSQLDBSocket ...

  9. django+celery+redis实现运行定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  10. redis深入研究

    Redis 设计思路学习与总结 https://cloud.tencent.com/developer/article/1004464 Redis 设计思路学习与总结 下半年利用空余时间研究和分析了部 ...