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. c++ primer敲代码第二章

    今天越来越发现 学习一门编程语言,没有大量的code实践是不行的.看得快忘得更快.痛下决心,把primer的code习题一一实现. 习题2.11 底数和指数,求结果 #include <iost ...

  2. HashSet如何排序

    方法一: 把HashSet保存在ArrayList里,再用Collections.sort()方法比較 private void doSort(){ final HashSet<Integer& ...

  3. Codeforces 786C Till I Collapse(树状数组+扫描线+倍增)

    [题目链接] http://codeforces.com/contest/786/problem/C [题目大意] 给出一个数列,问对于不同的k,将区间划分为几个, 每个区间出现不同元素个数不超过k时 ...

  4. 【博弈论】【SG函数】【找规律】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) E. Game of Stones

    打表找规律即可. 1,1,2,2,2,3,3,3,3,4,4,4,4,4... 注意打表的时候,sg值不只与剩下的石子数有关,也和之前取走的方案有关. //#include<cstdio> ...

  5. 【堆】bzoj1293 [SCOI2009]生日礼物

    考虑poj3320尺取法的做法,与此题基本一样,但是此题的 位置 的范围到2^31 尺取法不可. 将每种珠子所在的位置排序. 每种珠子要维护一个指针,指到已经用到这个种类的哪个珠子. 所以尺取法用堆优 ...

  6. 【莫队算法】bzoj3289 Mato的文件管理

    莫队算法,离线回答询问,按一定大小(sqrt(n*log(n))左右)将答案分块,按 ①左端点所在块②右端点 双关键字排序. 然后暴力转移. 转移的时候用树状数组. O(n*sqrt(n)*log(n ...

  7. 1.6(java学习笔记)static关键字

    static关键字 1.static修饰变量也称静态变量,静态变量存放在静态区被该类的所有对象共享. 例如,定义了一个类class User{static Sring city = "a城& ...

  8. 排排看(p20)

    public class paixu{public static void main(String[] args){int x=3;if(x>2){System.out.print(" ...

  9. cocos2d 文件系统使用文件内存映射性能对比

    //cocos 修改代码 ..... //性能测试代码 extern "C" { #include <time.h> #include <stdlib.h> ...

  10. 从cmd连接mysql数据库控制台

    在cmd中进入mysql安装目录的bin目录然后执行命令 mysql -uuser -ppassword database比如用户名为root,密码为mysql,数据库为test命令如下mysql - ...