关于数据序列化(3),使用JSON的方式,以及几个注意的点,以及fastJson的坑
来源:互联网 发布:h5页面分享到朋友圈js 编辑:程序博客网 时间:2024/06/13 23:37
JSON也是对象序列化的一种方式
public class FriendLikeVO {public String sn; public int score; public long time;public FriendLikeVO(JSONObject jo) {this.sn = jo.getString("sn");this.score = jo.getIntValue("score");this.time = jo.getLong("time");}public FriendLikeVO() {}public FriendLikeVO(String sn, int score, long time) {this.sn = sn;this.score = score;this.time = time;}/** * 把Json转换为List */public static List<FriendLikeVO> jsonToList(String json) {List<FriendLikeVO> result = new ArrayList<FriendLikeVO>();JSONArray ja = JSON.parseArray(json);if (ja == null) {return result;}for (int i = 0; i < ja.size(); i++) {FriendLikeVO vo = new FriendLikeVO(ja.getJSONObject(i));result.add(vo);}return result;}/** * 将List转换为Json */public static String listToJson(List<FriendLikeVO> likeList) {JSONArray ja = new JSONArray();likeList.stream().forEach(vo -> {JSONObject jo = new JSONObject();jo.put("sn", vo.sn);jo.put("score", vo.score);jo.put("time", vo.time);ja.add(jo);});return ja.toJSONString();}}
但是用fastjson的序列化更简单一些,如果不想序列化的字段就标注transient就可以了
public class FriendLike {public String sn; // 好友ID,目前为IPpublic int score; // 点赞的点数public long time; public transient int cc;public FriendLike() {}public FriendLike(String sn, int score, long time) {this.sn = sn;this.score = score;this.time = time;}/** * 把Json转换为List */@SuppressWarnings("unchecked")public static List<FriendLike> jsonToList(String json) {if(Util.isEmpty(json)){return new ArrayList<FriendLike>();}return JSON.parseObject(json, List.class);}/** * 将List转换为Json */public static String listToJson(List<FriendLike> likeList) {if(null == likeList){return null;}return JSON.toJSONString(likeList);}
}tips:
fastjson的循环引用问题,反序列化也是可以成功的
测试代码
FriendLike fk = new FriendLike("a", 2, System.currentTimeMillis());
FriendLike fk2 = new FriendLike("b", 2, System.currentTimeMillis());
List<FriendLike> list = new ArrayList<>();
list.add(fk);
list.add(fk2);
list.add(fk2);
String a = JSON.toJSONString(list);
List<FriendLike> list2 = JSON.parseObject(a, List.class);
System.out.println(a);
System.out.println(list);
输出结果
[{"score":2,"sn":"a","time":1470211141179},{"score":2,"sn":"b","time":1470211141179},{"$ref":"$[1]"}]
[FriendLike[sn=a,score=2,time=1470211141179], FriendLike[sn=b,score=2,time=1470211141179], FriendLike[sn=b,score=2,time=1470211141179]]
注意一个坑,如果要序列化List的时候应该使用JSON.parseArray这个方法,并且注意,被序列化的对象类型要有无参构造方法!
@SuppressWarnings("unchecked")public static List<FriendHelpVO> jsonToList(String json) {if (Util.isEmpty(json)) {return new ArrayList<FriendHelpVO>();}return JSON.parseArray(json, FriendHelpVO.class);}
- 关于数据序列化(3),使用JSON的方式,以及几个注意的点,以及fastJson的坑
- 关于数据序列化(3),JSON的方式,FastJson序列化对象和List集合示例
- 关于java response的两种页面输出方式,以及HttpUrlconnection 代理使用注意点
- 关于JSON对象的解析,以及阿里fastjson中一个API的使用
- 关于自定义tableviewcell的注意点以及用到的几个比较有用的函数
- js操作json的一些方法以及注意点及清缓存的方式
- yum 的使用以及注意点
- jquery的使用注意点以及建议
- 内联函数的使用以及注意点
- RecycleView的使用以及一些注意点
- 几个简单的JSP网页以及注意点
- window.open() POST 方式提交json数据,以及后台的json序列化为对象
- 大数据_Storm_allGrouping方式需要注意的几个点
- AngularJS的一些坑以及注意点
- AngularJS的一些坑以及注意点
- 说说使用 JavaScript 解析以及序列化 JSON 的方法
- FastJSON序列化的使用
- 关于数据序列化(4),FastJson的两个bug
- HaProxy实现Mongos负载均衡
- java 基础之Map用法
- 调用系统照相机和相册
- mmap与直接IO(read、write)的效率比较
- MVC 全局菜单权限过滤器
- 关于数据序列化(3),使用JSON的方式,以及几个注意的点,以及fastJson的坑
- lintcode insert-node-in-a-binary-search-tree 在二叉查找树中插入节点
- 排序算法一览(上):交换类、选择类和插入类排序
- mybatis中 大于小于的写法
- bing87496988 ~ onvif笔记~~soap编程流程
- swift使用FMDB数据库增删改查
- HDU 5781 ATM Mechine( 多校5 DP&期望+记忆化搜索)
- 2015 偶数求和
- 一个简单的AsyncTast小例子