Fast

您所在的位置:网站首页 天正如何转换成实体 Fast

Fast

2024-07-10 06:47| 来源: 网络整理| 查看: 265

一个完美的JSON框架不仅仅可以创建JSON对象,还应该可以将JSON对象与实体之间互相转换,而fast-json就是如此一个框架,前面我们已经知道JSONObject 的getObject方法可以将从JSONObject获取到的一个值转换为实体。除此之外com.alibaba.fastjson.JSON有很多静态方法用于实体与JSON对象之间的转换。其中主要有:

toJavaObject 将JSON对象转换为实体对象parse 将JSON 字符串转化为JSONObject或者实体对象parseArray 将字符串转换为 JSONArray或者List类型parseObject 将JSON字符串转化为JSONObject或者实体对象toJSON 将对象抓换为JSON对象toJSONBytes 将对象转换为序列化JSON数据toJSONString 将对象转换为JSON字符串

下面我们使用几个例子展示使用fast-json将实体与JSONObject进行转换。在转换时我们需要考虑一下几个方面:

1.JSONObject转换为实体时,JSONObject的key在实体不存在时怎么解决的。

public static void feildsLtKey() { JSONObject json = new JSONObject(); json.put("city", "hangzhou"); json.put("id", "1"); json.put("user", "user"); User user1 = JSON.toJavaObject(json, User.class); User user2 = JSON.parseObject(json.toJSONString(),User.class); System.out.println(user1.toString()); System.out.println(user2.toString()); User user3 = json.getObject("user", User.class); System.out.println(user3); } 运行结果: User [id=1, username=null, isLogin=false, money=0.0, roles=null, psPassword=null] User [id=1, username=null, isLogin=false, money=0.0, roles=null, psPassword=null] Exception in thread "main" com.alibaba.fastjson.JSONException: syntax error, expect {, actual string, pos 0, fastjson-version 1.2.62 at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:505) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseRest(JavaBeanDeserializer.java:1555) at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_1_User.deserialze(Unknown Source) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:284) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:687) at com.alibaba.fastjson.JSON.parseObject(JSON.java:383) at com.alibaba.fastjson.JSON.parseObject(JSON.java:287) at com.alibaba.fastjson.JSON.parseObject(JSON.java:560) at com.alibaba.fastjson.util.TypeUtils.cast(TypeUtils.java:1069) at com.alibaba.fastjson.util.TypeUtils.castToJavaBean(TypeUtils.java:891) at com.alibaba.fastjson.JSONObject.getObject(JSONObject.java:153) at cn.org.microservice.fastjson.json2object.JSONObject2Entity.feildsLtKey(JSONObject2Entity.java:36) at cn.org.microservice.fastjson.json2object.JSONObject2Entity.main(JSONObject2Entity.java:52) 总结: 1.使用JSON中的方法转换时如果JSON中的key不在实体中的字段,则会忽略该key 2.使用JSONObject中的getObject方法时,如果获取的字段类型不一致,则抛出异常

2.JSONObject转换为实体时,实体的字段在不在JSONObject的的key中怎么解决

public static void feildsGtKey() { JSONObject json = new JSONObject(); User user1 = JSON.toJavaObject(json, User.class); User user2 = json.getObject("user", User.class); System.out.println(user1.toString()); System.out.println(user2.toString()); } 运行结果: User [id=0, username=null, isLogin=false, money=0.0, roles=null, psPassword=null] User [id=0, username=null, isLogin=false, money=0.0, roles=null, psPassword=null] Exception in thread "main" java.lang.NullPointerException at cn.org.microservice.fastjson.json2object.JSONObject2Entity.feildsGtKey(JSONObject2Entity.java:38) at cn.org.microservice.fastjson.json2object.JSONObject2Entity.main(JSONObject2Entity.java:42) 总结: 1.可以看出使用JSON转换时,不存在实体中的字段时,实体会给实体中的字段赋默认值 2.使用JSONObjct转换时,如果字段不存在则抛出null指针异常

3.多层级的实体,即一个实体可能包含另外的实体或者集合Collection是怎么转换为JSONObject对象的。

public static void main(String[] args) { User user = new User(); user.setId(1); user.setUsername("pharos"); user.setLogin(true); user.setMoney(300.0F); List roles = new ArrayList(); roles.add("admin"); roles.add("user"); user.setRoles(roles); UserPassword ps = new UserPassword(); ps.setPassword("sss"); ps.setSalt("ss"); Map map = new HashMap(); map.put("test", "test"); ps.setMap(map); user.setPsPassword(ps); JSONObject json = (JSONObject) JSON.toJSON(user); String json2 = JSON.toJSONString(user); JSONObject json3 = (JSONObject) JSON.parse(json2); JSONObject json4 = JSON.parseObject(json3.toJSONString(), JSONObject.class); System.out.println(json); System.out.println(json2); System.out.println(json3); System.out.println(json4); } 运行结果: {"money":300.0,"roles":["admin","user"],"id":1,"login":true,"psPassword":{"password":"sss","salt":"ss","map":{"test":"test"}},"username":"pharos"} {"id":1,"login":true,"money":300.0,"psPassword":{"map":{"test":"test"},"password":"sss","salt":"ss"},"roles":["admin","user"],"username":"pharos"} {"money":300.0,"roles":["admin","user"],"id":1,"login":true,"psPassword":{"password":"sss","salt":"ss","map":{"test":"test"}},"username":"pharos"} {"money":300.0,"roles":["admin","user"],"id":1,"login":true,"psPassword":{"password":"sss","salt":"ss","map":{"test":"test"}},"username":"pharos"} 总结: JSON中的方法可以将多层对象转换为Object

4.JSONObject怎么转换为多层级实体,即一个实体可能包含另外的实体或者集合Collection

public static void feildsEqKey() { JSONObject json = new JSONObject(); User user = new User(); user.setId(1); user.setUsername("pharos"); user.setLogin(true); user.setMoney(300.0F); List roles = new ArrayList(); roles.add("admin"); roles.add("user"); user.setRoles(roles); UserPassword ps = new UserPassword(); ps.setPassword("sss"); ps.setSalt("ss"); Map map = new HashMap(); map.put("test", "test"); ps.setMap(map); user.setPsPassword(ps); json.put("user", user); json.put("id", 2); json.put("username", "jetty"); json.put("isLogin", false); json.put("money", 600.0F); json.put("roles", roles); json.put("psPassword", ps); User user1 = JSON.toJavaObject(json, User.class); User user2 = JSON.parseObject(json.toJSONString(),User.class); System.out.println(user1.toString()); System.out.println(user2.toString()); User user3 = json.getObject("user", User.class); System.out.println(user3); } 运行结果: User [id=2, username=jetty, isLogin=false, money=600.0, roles=[admin, user], psPassword=UserPassword [password=sss, salt=ss, map={test=test}]] User [id=2, username=jetty, isLogin=false, money=600.0, roles=[admin, user], psPassword=null] User [id=1, username=pharos, isLogin=true, money=300.0, roles=[admin, user], psPassword=UserPassword [password=sss, salt=ss, map={test=test}]] 总结: 1.JSON的toJavaObject方法和JSONObject的getObject方法支持深转换,可以转换实体内的对象 2.JSON的parseObject方法不支持深转换,只能转换一层对象

以上为fast-json对象转换之间最常用的API,上述方法都是重载方法,可以传入不通的参数,具体使用方式,可以查阅Fast-Json API

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3