javabean与json转换(fastjson与jackson两个版本)
【README】
本文演示了 javabean與json轉(zhuǎn)換的開發(fā)方式;
要想 javabean的屬性名 與 json的字段名不一致,也是可以轉(zhuǎn)換的;
之前需要引入 ali.fastjson
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version></dependency>【1】javabean與fastjson互轉(zhuǎn)
對于 perons, 需求是屬性id 轉(zhuǎn)換為 json字符串后,其字段名為 myid;
public class FastPerson {@JSONField(name="myid") // bean屬性id的別名為myidprivate int id;@JSONField(name="name")private String name;@JSONField(serialize = false) // bean的city屬性不轉(zhuǎn)為json字符串private String city;@JSONField(deserialize = false) // json字符串的addr字段不解析到bean的addr屬性private String addr;// 不進(jìn)行序列化與反序列化(transient對 fastjson有效)private transient String dontTrans;public void setId(int id) {this.id = id;}public void setName(String name) {this.name = name;}public void setCity(String city) {this.city = city;}public void setAddr(String addr) {this.addr = addr;}public int getId() {return id;}public String getName() {return name;}public String getCity() {return city;}public String getAddr() {return addr;}public String getDontTrans() {return dontTrans;}public void setDontTrans(String dontTrans) {this.dontTrans = dontTrans;}@Overridepublic String toString() {return "FastPerson{" +"id=" + id +", name='" + name + '\'' +", city='" + city + '\'' +", addr='" + addr + '\'' +", dontTrans1='" + dontTrans + '\'' +'}';} }轉(zhuǎn)換測試用例;
public class FastJsonDemo {public static void main(String[] args) {FastPerson person2 = new FastPerson();person2.setId(1);person2.setName("zhangsan");person2.setAddr("gaoxinqu");person2.setCity("cd");person2.setDontTrans("dont");// bean 轉(zhuǎn)json字符串String jsonstr2 = JSON.toJSONString(person2);System.out.println(jsonstr2);// json字符串轉(zhuǎn)beanFastPerson p2 = JSON.parseObject(jsonstr2, FastPerson.class);System.out.println(p2);} }打印結(jié)果;
{"addr":"gaoxinqu","myid":1,"name":"zhangsan"}
Person2{id=1, name='zhangsan', city='null', addr='null', dontTrans1='null'}
【補充】
- @JSONField(name="myid") 注解用于定義javabean屬性的別名,即轉(zhuǎn)為json字符串之后的字段名;
- @JSONField(serialize = false)?? bean的city屬性不轉(zhuǎn)為json字符串(不進(jìn)行序列化)
- @JSONField(deserialize = false)? json字符串的addr字段不解析到bean的addr屬性(不進(jìn)行反序列化)
- transient 用于表示該字段不進(jìn)行序列化與反序列化;?
- 需要轉(zhuǎn)換json的bean,必須要有 getter 和 setter 方法 ;
【2】javabean與jackson互轉(zhuǎn)
添加maven依賴;
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.5</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.5</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.5</version></dependency>jackson測試的javabean;?
public class JacksonPerson {@JsonProperty("myid") // bean屬性id的別名為myidprivate int id;@JsonProperty("name")private String name;@JsonIgnore // bean的city屬性不轉(zhuǎn)為json字符串private String city;@JsonIgnore // json字符串的addr字段不解析到bean的addr屬性private String addr;// transient 對 jackson 無效, 即jackson還是會序列化與反序列化 dontTrans 屬性private transient String dontTrans;public void setId(int id) {this.id = id;}public void setName(String name) {this.name = name;}public void setCity(String city) {this.city = city;}public void setAddr(String addr) {this.addr = addr;}public int getId() {return id;}public String getName() {return name;}public String getCity() {return city;}public String getAddr() {return addr;}public String getDontTrans() {return dontTrans;}public void setDontTrans(String dontTrans) {this.dontTrans = dontTrans;}@Overridepublic String toString() {return "JacksonPerson{" +"id=" + id +", name='" + name + '\'' +", city='" + city + '\'' +", addr='" + addr + '\'' +", dontTrans1='" + dontTrans + '\'' +'}';} }jackson測試用例:
public class JacksonDemo {public static void main(String[] args) {JacksonPerson jacksonPerson = new JacksonPerson();jacksonPerson.setId(1);jacksonPerson.setName("zhangsan");jacksonPerson.setAddr("gaoxinqu");jacksonPerson.setCity("cd");jacksonPerson.setDontTrans("dont");// bean 轉(zhuǎn)json字符串String jacksonStr = JacksonUtils.beanToJson(jacksonPerson);System.out.println(jacksonStr);// json字符串轉(zhuǎn)beanJacksonPerson p2 = JacksonUtils.jsonToBean(jacksonStr, JacksonPerson.class);System.out.println(p2);} }// jackson 工具 public class JacksonUtils {private JacksonUtils(){}private static ObjectMapper objectMapper;static {objectMapper = new ObjectMapper();}//bean轉(zhuǎn)換為json字符串public static String beanToJson(Object bean) {String jsonStr = "";try {jsonStr = objectMapper.writeValueAsString(bean);} catch (JsonProcessingException e) {e.printStackTrace();}return jsonStr;}//map轉(zhuǎn)換為json字符串public static String mapToJson(Map<String, Object> map) {String jsonStr = "";try {jsonStr = objectMapper.writeValueAsString(map);} catch (JsonProcessingException e) {e.printStackTrace();}return jsonStr;}//list轉(zhuǎn)換為json字符串public static String listToJson(List<Object> list) {String jsonStr = "";try {jsonStr = objectMapper.writeValueAsString(list);} catch (JsonProcessingException e) {e.printStackTrace();}return jsonStr;}//json字符串轉(zhuǎn)換為beanpublic static <T> T jsonToBean(String jsonStr, Class<T> clazz) {T bean = null;try {bean = objectMapper.readValue(jsonStr, clazz);} catch (IOException e) {e.printStackTrace();}return bean;}//json字符串轉(zhuǎn)換為listpublic static <T> List<T> jsonToList(String jsonStr, Class<T> clazz) {List list = null;try {list = (List) objectMapper.readValue(jsonStr, clazz);} catch (IOException e) {e.printStackTrace();}return list;}//json字符串轉(zhuǎn)換為mappublic static Map jsonToMap(String jsonStr, Class<?> clazz) {Map map = null;try {map = (Map) objectMapper.readValue(jsonStr, clazz);} catch (IOException e) {e.printStackTrace();}return map;} }打印結(jié)果:
{"dontTrans":"dont","myid":1,"name":"zhangsan"}
JacksonPerson{id=1, name='zhangsan', city='null', addr='null', dontTrans1='dont'}
顯然, transient 對 jackson 無效,即 ?即jackson還是會序列化與反序列化 dontTrans 屬性;
【2】fastjson 與 jackson 區(qū)別
【2.1】fastjson
是阿里的開源框架,被不少企業(yè)使用,是一個極其優(yōu)秀的Json框架; 字符串解析成JavaBean時,當(dāng)數(shù)據(jù)量較少時首選fastjson;字符串解析成JSON時,當(dāng)數(shù)據(jù)量較少時首選fastjson。
例子:
//將對象或List轉(zhuǎn)為json字符串或json數(shù)組 JSON.toJSONString(obj); //將json字符串和json數(shù)組轉(zhuǎn)為對象或list JSON.toJSON(jsonStr)【2.2】jackson
是基于Java平臺的一套數(shù)據(jù)處理工具,被稱為“最好的Java Json解析器”;字符串解析成JavaBean時,數(shù)據(jù)量較大使用jackson;字符串解析成JSON時,數(shù)據(jù)量較大使用jackson。
//首先要先定義一個Mapper ObjectMapper mapper = new ObjectMapper(); //將對象或List轉(zhuǎn)為json字符串或json數(shù)組 mapper.writeValueAsString(obj); //將json字符串和json數(shù)組轉(zhuǎn)為對象或list mapper.readValue(jsonStr, Class);補充: 數(shù)據(jù)量是多少算較少,算較大 ?
本文僅給出一個經(jīng)驗值 100w,但具體要在本地做性能測試才可以計算出來;
補充:兩者性能測試 refer2
[享學(xué)Jackson] 二十二、Jackson與Fastjson的恩怨情仇(完結(jié)篇)【附源碼】_YourBatman_51CTO博客
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的javabean与json转换(fastjson与jackson两个版本)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网页设计怎么添加视频(网页设计怎么添加视
- 下一篇: 网页设计怎么添加视频教程(网页设计怎么添