日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

javabean与json转换(fastjson与jackson两个版本)

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javabean与json转换(fastjson与jackson两个版本) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【README】

本文演示了 javabean與json轉換的開發方式;

要想 javabean的屬性名 與 json的字段名不一致,也是可以轉換的;

之前需要引入 ali.fastjson

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version></dependency>

【1】javabean與fastjson互轉

對于 perons, 需求是屬性id 轉換為 json字符串后,其字段名為 myid;

public class FastPerson {@JSONField(name="myid") // bean屬性id的別名為myidprivate int id;@JSONField(name="name")private String name;@JSONField(serialize = false) // bean的city屬性不轉為json字符串private String city;@JSONField(deserialize = false) // json字符串的addr字段不解析到bean的addr屬性private String addr;// 不進行序列化與反序列化(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 + '\'' +'}';} }

轉換測試用例;

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 轉json字符串String jsonstr2 = JSON.toJSONString(person2);System.out.println(jsonstr2);// json字符串轉beanFastPerson p2 = JSON.parseObject(jsonstr2, FastPerson.class);System.out.println(p2);} }

打印結果;

{"addr":"gaoxinqu","myid":1,"name":"zhangsan"}
Person2{id=1, name='zhangsan', city='null', addr='null', dontTrans1='null'}

【補充】

  • @JSONField(name="myid") 注解用于定義javabean屬性的別名,即轉為json字符串之后的字段名;
  • @JSONField(serialize = false)?? bean的city屬性不轉為json字符串(不進行序列化)
  • @JSONField(deserialize = false)? json字符串的addr字段不解析到bean的addr屬性(不進行反序列化)
  • transient 用于表示該字段不進行序列化與反序列化;?
  • 需要轉換json的bean,必須要有 getter 和 setter 方法

【2】javabean與jackson互轉

添加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屬性不轉為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 轉json字符串String jacksonStr = JacksonUtils.beanToJson(jacksonPerson);System.out.println(jacksonStr);// json字符串轉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轉換為json字符串public static String beanToJson(Object bean) {String jsonStr = "";try {jsonStr = objectMapper.writeValueAsString(bean);} catch (JsonProcessingException e) {e.printStackTrace();}return jsonStr;}//map轉換為json字符串public static String mapToJson(Map<String, Object> map) {String jsonStr = "";try {jsonStr = objectMapper.writeValueAsString(map);} catch (JsonProcessingException e) {e.printStackTrace();}return jsonStr;}//list轉換為json字符串public static String listToJson(List<Object> list) {String jsonStr = "";try {jsonStr = objectMapper.writeValueAsString(list);} catch (JsonProcessingException e) {e.printStackTrace();}return jsonStr;}//json字符串轉換為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字符串轉換為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字符串轉換為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;} }

打印結果:

{"dontTrans":"dont","myid":1,"name":"zhangsan"}
JacksonPerson{id=1, name='zhangsan', city='null', addr='null', dontTrans1='dont'}

顯然, transient 對 jackson 無效,即 ?即jackson還是會序列化與反序列化 dontTrans 屬性;


【2】fastjson 與 jackson 區別

【2.1】fastjson

是阿里的開源框架,被不少企業使用,是一個極其優秀的Json框架; 字符串解析成JavaBean時,當數據量較少時首選fastjson;字符串解析成JSON時,當數據量較少時首選fastjson

例子:

//將對象或List轉為json字符串或json數組 JSON.toJSONString(obj); //將json字符串和json數組轉為對象或list JSON.toJSON(jsonStr)

【2.2】jackson

是基于Java平臺的一套數據處理工具,被稱為“最好的Java Json解析器”;字符串解析成JavaBean時,數據量較大使用jackson;字符串解析成JSON時,數據量較大使用jackson

//首先要先定義一個Mapper ObjectMapper mapper = new ObjectMapper(); //將對象或List轉為json字符串或json數組 mapper.writeValueAsString(obj); //將json字符串和json數組轉為對象或list mapper.readValue(jsonStr, Class);

補充: 數據量是多少算較少,算較大 ?

本文僅給出一個經驗值 100w,但具體要在本地做性能測試才可以計算出來;

補充:兩者性能測試 refer2

[享學Jackson] 二十二、Jackson與Fastjson的恩怨情仇(完結篇)【附源碼】_YourBatman_51CTO博客

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的javabean与json转换(fastjson与jackson两个版本)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产三级国产精品国产专区50 | 韩国在线不卡 | 婷婷九月综合 | 精品日韩一区 | 综合五月 | 国产一级影院 | 波多野吉衣在线视频 | 国产精品jizz视频 | 亚洲欧美一二三 | 日本中文字幕在线看 | 亚洲免费不卡视频 | 特黄一区二区 | 国产精品久久 | 中文字幕丰满乱子伦无码专区 | 欧美11一13sex性hd| 久久色网 | 插插看看 | 激情五月婷婷综合网 | 国产swag在线观看 | 久久亚洲第一 | 欧美亚洲在线播放 | 久久视精品 | 黄瓜视频在线观看 | 狠狠干亚洲色图 | 99草视频 | 国产无遮挡又黄又爽又色 | 激情五月色综合国产精品 | 老王66福利网 | 国产综合内射日韩久 | 亚洲第一页夜 | 在线观看免费黄色 | 夜夜操夜夜 | 免费观看成年人网站 | 美女脱了裤子让男人桶 | 国产在线精品自拍 | 久草青青草 | 日本少妇久久久 | 日韩在线中文 | 野外一级片 | 国产精品亚州 | 久久久久久成人精品 | 久久久国产精华液 | av在线资源观看 | 亚洲综合一区在线 | 男人久久天堂 | 春色导航 | 日韩成人在线免费视频 | 成人在线免费小视频 | 波多野结衣视频免费在线观看 | 国产精品丝袜在线 | 九月激情网 | 久久在线精品 | 精品人妻天天爽夜夜爽视频 | 国产在线视频导航 | 韩国美女一区 | 日韩久久在线 | 卡一卡二卡三 | 九九色综合| 亚洲午夜在线 | 天天操天天干天天插 | 欧美日韩高清在线 | 狠狠gao | 精品日韩一区二区 | 变态另类ts人妖一区二区 | 免费欧美大片 | 亚洲第6页| 臭脚猛1s民工调教奴粗口视频 | 国产又粗又猛又黄又爽无遮挡 | 三年中文免费观看大全动漫 | 日韩av无码一区二区三区不卡 | 欧美性教育视频 | 日韩大片一区二区 | 国产女人18水真多18精品一级做 | 五月婷婷基地 | 欧美一卡二卡在线观看 | 国产午夜无码视频在线观看 | 一级片视频免费看 | 中文字幕国产一区 | 不卡免费视频 | 国产美女久久久久久 | 日韩中文字幕有码 | 黄色片上床 | 久色免费视频 | 久久最新| 日韩中文字幕av电影 | 诱惑の诱惑筱田优在线播放 | 无码国内精品人妻少妇蜜桃视频 | 妖精视频在线观看 | aaa一区二区| 91色| 麻豆成人入口 | 欧美日韩精品在线 | 天天干夜夜干 | 国内成人自拍 | 一区二区三区国产精品视频 | 六月激情婷婷 | 黄色动漫在线观看 | 影音先锋在线观看视频 | 黄色在线观看国产 |