关于数据序列化(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);}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 空调铜管折弯了怎么办 沈阳学叉车证怎么办 幼儿老师教不会怎么办 学东西学不会怎么办 学不会汽修怎么办 挖掘机发票丢了怎么办 工会经费多缴怎么办 机票姓名错了怎么办 抹胸衣服下掉怎么办 穿抹胸很容易掉怎么办 抹胸衣服老掉怎么办 群里有低俗的人怎么办 老师不收礼物怎么办 发票跨年了怎么办 一用力就头疼怎么办 小孩天天玩游戏怎么办 手机分期人死了怎么办 人死了手机欠费怎么办 晚上想玩手机怎么办 孩子溺水后发烧怎么办 去台湾多次签证怎么办 怀孕不能玩手机怎么办 孕期天天玩手机怎么办 小孩子在家偷钱怎么办 小朋友被鸡抓伤怎么办 宝宝在学校不说怎么办? 宝宝不和小朋友玩怎么办 初中孩子不想上学怎么办 孩子装病不想上学怎么办 中学生叛逆不愿意上学怎么办 孩子去幼儿园哭闹怎么办 孩子哭闹不上学怎么办 孩子中班还哭怎么办 小孩子不爱上幼儿园怎么办 小孩子不爱去幼儿园怎么办 宝宝去幼儿园哭闹怎么办 宝宝上幼儿园哭闹怎么办 小朋友上幼儿园哭闹怎么办 迷路了怎么办幼儿故事 大班迷路了怎么办故事 玩手机眼睛干涩怎么办