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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java json转换

發布時間:2025/7/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java json转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://blog.csdn.net/WillJGL/article/details/77866224

?

SpringBoot中如果需要實現json的序列化和反序列化,我們會使用json解析工具。一般用到的有fastjson、GSON、Jackson
根據網上的測試,Jackson性能好一些,而且Jackson是SpringBoot默認引用的
本文記錄SpringBoot如何使用Jackson

準備

1、在項目中創建包Jackson
2、分別創建4各類文件
2.1、Company實體類(里面包含Department的list)
2.2、Department實體類
2.3、jsonController controller類,接收測試請求
2.4、JsonHelper Jackson操作類
如題所示

每個類內容如下
Company

import java.util.ArrayList; import java.util.List;public class Company { private String name; private String address; private int employeesCount; private List<Department> departmentArrayList; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getEmployeesCount() { return employeesCount; } public void setEmployeesCount(int employeesCount) { this.employeesCount = employeesCount; } public List<Department> getDepartmentArrayList() { return departmentArrayList; } public void setDepartmentArrayList(List<Department> departmentArrayList) { this.departmentArrayList = departmentArrayList; } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

Department

public class Department {private String name;private int employeesCount; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getEmployeesCount() { return employeesCount; } public void setEmployeesCount(int employeesCount) { this.employeesCount = employeesCount; } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

jsonController

import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JavaType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.*; @RestController @RequestMapping("/json") public class jsonController { private final Logger logger = LoggerFactory.getLogger(this.getClass());//對象方式初始化Log對象 @GetMapping("") public String index() throws Exception { JsonHelper jm = new JsonHelper(); //1、對象<->Json //準備數據 Company c = getCompany(); //對象轉Json String json = jm.toJson(c); logger.info("1.1、對象轉Json="+json); //Json轉對象 Company obj = jm.fromJson(json,Company.class); logger.info("1.2、Json轉對象="+ obj.getDepartmentArrayList().get(0).getName()); //2、Map<->Json //Json轉Map Map map = jm.fromJson(json,Map.class); List<Map> tempList = (List<Map>)map.get("departmentArrayList"); logger.info("2.1、Json轉Map="+tempList.get(0).get("name")); //Map轉Json json = jm.toJson(map); logger.info("2.2、Map轉Json="+json); //3、List<Object> <->Json //準備數據 List<Company> companyList = new ArrayList<Company>(); companyList.add(getCompany()); companyList.add(getCompany()); companyList.add(getCompany()); //List<Object>轉Json json = jm.toJson(companyList); logger.info("3.1、List<Object>轉Json="+json); //Json轉List<Object> List<Company> companyListDecode = jm.fromJson(json,new TypeReference<List<Company>>() {}); logger.info("3.2、Json轉List<Object>="+companyListDecode.get(0).getDepartmentArrayList().get(0).getName()); //4、Map<String, Object><-> Json //準備數據 Map<String, Company> map1 = new HashMap<String, Company>() ; map1.put("1",getCompany()); map1.put("2",getCompany()); map1.put("3",getCompany()); //Map<String, Object>轉Json json = jm.toJson(map1); logger.info("4.1、Map<String, Object>轉Json="+json); //Json轉Map<String, Object> Map<String, Company> map1Decode = jm.fromJson(json,new TypeReference<Map<String, Company>>() {}); logger.info("4.2、Json轉Map<String, Object>="+map1Decode.get("1").getDepartmentArrayList().get(0).getName()); //5、List<Map<String, Object>><->Json //準備數據 List<Map<String, Company>> listMap =new ArrayList<Map<String, Company>>(); Map<String, Company> map2 = new HashMap<String, Company>() ; map2.put("a",getCompany()); map2.put("b",getCompany()); map2.put("c",getCompany()); listMap.add(map1); listMap.add(map2); //List<Map<String, Object>> 轉Json json = jm.toJson(listMap); logger.info("5.1、List<Map<String, Object>> 轉Json="+json); //Json 轉 List<Map<String, Object>> List<Map<String, Company>> listMapDecode = jm.fromJson(json,new TypeReference<List<Map<String, Company>>>() {}); logger.info("5.2、List<Map<String, Object>> 轉Json="+listMapDecode.get(0).get("1").getDepartmentArrayList().get(0).getName()); return ""; } private Company getCompany() { long time = new Date().getTime(); String sTime = String.valueOf(time); Company c = new Company(); c.setEmployeesCount(10); c.setName("公司名"+sTime); List list = new ArrayList(); Department d1= new Department(); d1.setEmployeesCount(5); d1.setName("部門1"+sTime); Department d2= new Department(); d2.setEmployeesCount(5); d2.setName("部門2"+sTime); list.add(d1); list.add(d2); c.setDepartmentArrayList(list); return c; } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120

JsonHelper

import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.util.JSONPObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; public class JsonHelper { private Logger logger = LoggerFactory.getLogger(this.getClass()); ObjectMapper mapper; public JsonHelper() { mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); } public JsonHelper(JsonInclude.Include include) { mapper = new ObjectMapper(); mapper.setSerializationInclusion(include); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); } public String toJson(Object object) throws JsonProcessingException { return mapper.writeValueAsString(object); } public <T> T fromJson(String json, Class<T> cls) throws IOException { return mapper.readValue(json, cls); } public <T> T fromJson(String json,TypeReference valueTypeRef) throws IOException { return mapper.readValue(json, valueTypeRef); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

轉換方式

共舉例如下幾種轉換方式(整體在jsonController文件中,這里分別拆出來說明)

對象<->Json

//1、對象<->Json//準備數據Company c = getCompany();//對象轉JsonString json = jm.toJson(c); logger.info("1.1、對象轉Json="+json); //Json轉對象 Company obj = jm.fromJson(json,Company.class); logger.info("1.2、Json轉對象="+ obj.getDepartmentArrayList().get(0).getName());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Map<->Json

//2、Map<->Json//Json轉MapMap map = jm.fromJson(json,Map.class); List<Map> tempList = (List<Map>)map.get("departmentArrayList"); logger.info("2.1、Json轉Map="+tempList.get(0).get("name")); //Map轉Json json = jm.toJson(map); logger.info("2.2、Map轉Json="+json);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

List<Object> <->Json

//3、List<Object> <->Json//準備數據List<Company> companyList = new ArrayList<Company>();companyList.add(getCompany()); companyList.add(getCompany()); companyList.add(getCompany()); //List<Object>轉Json json = jm.toJson(companyList); logger.info("3.1、List<Object>轉Json="+json); //Json轉List<Object> List<Company> companyListDecode = jm.fromJson(json,new TypeReference<List<Company>>() {}); logger.info("3.2、Json轉List<Object>="+companyListDecode.get(0).getDepartmentArrayList().get(0).getName());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Map<String, Object><-> Json

//4、Map<String, Object><-> Json//準備數據Map<String, Company> map1 = new HashMap<String, Company>() ; map1.put("1",getCompany()); map1.put("2",getCompany()); map1.put("3",getCompany()); //Map<String, Object>轉Json json = jm.toJson(map1); logger.info("4.1、Map<String, Object>轉Json="+json); //Json轉Map<String, Object> Map<String, Company> map1Decode = jm.fromJson(json,new TypeReference<Map<String, Company>>() {}); logger.info("4.2、Json轉Map<String, Object>="+map1Decode.get("1").getDepartmentArrayList().get(0).getName());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

List<Map<String, Object>><->Json

//5、List<Map<String, Object>><->Json //準備數據 List<Map<String, Company>> listMap =new ArrayList<Map<String, Company>>(); Map<String, Company> map2 = new HashMap<String, Company>() ; map2.put("a",getCompany()); map2.put("b",getCompany()); map2.put("c",getCompany()); listMap.add(map1); listMap.add(map2); //List<Map<String, Object>> 轉Json json = jm.toJson(listMap); logger.info("5.1、List<Map<String, Object>> 轉Json="+json); //Json 轉 List<Map<String, Object>> List<Map<String, Company>> listMapDecode = jm.fromJson(json,new TypeReference<List<Map<String, Company>>>() {}); logger.info("5.2、List<Map<String, Object>> 轉Json="+listMapDecode.get(0).get("1").getDepartmentArrayList().get(0).getName());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

測試

訪問controller的方法,查看日志可以看出來每種轉換都可以成功轉為json,也可以成功轉為對象

其它特性

在有些時候,我們會希望進行一些特殊處理,例如json不

忽略字段

@JsonIgnore 進行JSON操作時忽略該屬性。
對于實體類中,如果有某個字段不希望參與json序列化與反序列化,可以把屬性標記為@JsonIgnore
例如Company這個類
如果我們給Name、Address、employeesCount三個屬性賦值了,序列化出來的內容是

{"name": "公司名1504688970821", "address": "地址", "employeesCount": 10 }
  • 1
  • 2
  • 3
  • 4
  • 5

如果employeesCount是一個內容計數的值,不希望參與序列化,我們可以標記它

@JsonIgnoreprivate int employeesCount;
  • 1
  • 2

這樣再次序列化的結果就變為了

{"name": "公司名1504689048950", "address": "地址" }
  • 1
  • 2
  • 3
  • 4

處理時間類型

@JsonFormat(pattern = “yyyy年MM月dd日”) 時間格式化
我們在Company實體類增加一個Date類型的屬性,并且賦值序列化

private Date createDate;public Date getCreateDate() {return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

賦值然后再序列化,得到的內容是

{"name": "公司名1504689283756", "address": "地址", "createDate": 1504689283756 }
  • 1
  • 2
  • 3
  • 4
  • 5

可以看到時間是一個數字
我們標記這個屬性,再次序列化

{"name": "公司名1504689362487", "address": "地址", "createDate": "2017年09月06日" }
  • 1
  • 2
  • 3
  • 4
  • 5

時間按照指定的格式顯示了

更改字段序列化名

@JsonProperty(“newName”) 改字段名
默認情況下,字段名是什么,序列化出來的key值也就是什么,如果我們希望序列化出來的名字和字段名不一樣,則需要使用這個標記
我們把Company的name標記為newName

@JsonProperty("newName")private String name;
  • 1
  • 2

然后進行序列化

{"address": "地址", "createDate": "2017年09月06日", "newName": "公司名1504689496978" }
  • 1
  • 2
  • 3
  • 4
  • 5

可以看出來,結果出來的key就使用了自定義的名字

總結

以上是生活随笔為你收集整理的java json转换的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美看片| 少妇高潮一区二区三区 | 五月天黄色小说 | 亚洲一区二区自拍偷拍 | 三级特黄视频 | 日韩第九页 | 天天干天天色天天 | 日韩少妇中文字幕 | 射进来av影视网 | 中文av在线播放 | 99热国产| 久久久久久国产免费a片 | 男人的天堂视频在线观看 | 色婷婷综合视频 | 中文文字幕一区二区三三 | 天堂在线8 | 国产av天堂无码一区二区三区 | 国产精品8 | 91高清视频免费观看 | 裸体裸乳被免费看视频 | 我和单位漂亮少妇激情 | 热久久久久久 | 一本一道久久a久久综合蜜桃 | 中文字幕中出 | 日韩欧美国产电影 | 天天爽夜夜爽夜夜爽精品 | 在线天堂网 | 精品伊人久久 | 成人公开免费视频 | 国产原创一区 | 久久99国产精品久久99果冻传媒 | 经典一区二区 | 99国产精品久久久久久久成人 | 尤物视频在线免费观看 | 欧美色交 | 日韩大片在线免费观看 | 麻豆视频在线免费看 | 久久激情网站 | 玖玖国产 | 操操操操操操操操操 | 果冻av在线 | www.国产麻豆 | 一区二区三区亚洲视频 | 婷婷亚洲综合五月天小说 | 人人妻人人爽欧美成人一区 | 日日夜夜免费 | 亚洲一区日本 | 亚洲制服一区二区 | 国产精品资源在线观看 | 在线免费观看 | 亚洲一区二区电影网 | 在线视频观看国产 | 久久av资源网 | 国产成人久久精品麻豆二区 | 91精品免费观看 | 黑森林福利视频导航 | 天天爽 | 国产一级在线播放 | 日韩有码一区二区三区 | 精品香蕉一区二区三区 | 在线视频一二区 | 日本国产在线播放 | 丰满人妻一区二区 | 香蕉久久精品日日躁夜夜躁 | 欧美亚洲色综久久精品国产 | 国产a视频精品免费观看 | www.视频一区| 尤物网址在线观看 | 亚洲涩涩爱 | 黄色一级影片 | 欧美日韩高清一区 | 被黑人猛躁10次高潮视频 | 午夜67194| 无码精品一区二区三区在线播放 | 91天堂在线观看 | 青青草国产在线视频 | 日本亚洲最大的色成网站www | 污视频免费在线 | 国产女人在线视频 | 久久久久99精品成人片直播 | 亚洲の无码国产の无码步美 | 成人av影院 | 自拍偷拍中文字幕 | 青青草国内自拍 | 黑人性视频 | a级片在线免费看 | 秋霞三区 | 女人高潮潮呻吟喷水 | 四虎永久在线精品免费网址 | xxxx18日本 | 日韩成人一区 | 韩国美女啪啪 | 国产特黄级aaaaa片免 | porn国产 | 五月天堂网 | 日韩手机在线视频 | 禁果av一区二区三区 | 国产av日韩一区二区三区精品 | 亚洲啊v在线 |