首页 技术 正文
技术 2022年11月22日
0 收藏 591 点赞 3,234 浏览 2619 个字

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,075
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,551
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,399
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,811
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,893