前言:JSON在传输数据时,起到了特别大的作用,本文是采用的是com.alibaba.fastjson第三方包完成json格式的转换
一、首先导入maven依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.19</version>
</dependency>
二、常用的一些方法
2.1 序列化
对象、集合序列化成json字符串
public static String toJSONString(Object object)
2.2 反序列化
json字符串反序列化成javabean对象或者类
public static <T> T parseObject(String text, Class<T> clazz)
json字符串反序列化成为List集合
public static <T> List<T> parseArray(String text, Class<T> clazz)
json字符串反序列化成为Map集合:
public static <T> T parseObject(String text, TypeReference<T> type, Feature... features)
三、Demo演示
package com.hssy.newcustomer;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.hssy.newcustomer.dto.fastjson.JsonDetailModule;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SpringBootTest
class NewcustomerApplicationTests {
//测试Java对象进行json序列化成json字符串
@Test
void contextLoads() {
JsonDetailModule module = new JsonDetailModule();
module.setId(2);
module.setName("张菲");
List<String> hobbys = new ArrayList<>();
hobbys.add("唱歌");
hobbys.add("书法");
hobbys.add("三国演绎");
module.setHobby(hobbys);
String jsonString = JSON.toJSONString(module);
System.out.println(jsonString);
// {"hobby":["唱歌","书法","三国演绎"],"id":2,"name":"张菲"}
}
//测试将List集合进行json序列化成json字符串
@Test
void testListToJson(){
List<JsonDetailModule> list = new ArrayList<>();
for (int i = 0; i < 2; i++) {
JsonDetailModule module = new JsonDetailModule();
module.setId(i);
module.setName("用户:"+ i);
List<String> hobbys = new ArrayList<>();
hobbys.add("随机爱好:"+(char) (0x4e00 + (int) (Math.random() * (0x9fa5 - 0x4e00 + 1))));
hobbys.add("随机爱好:"+(char) (0x4e00 + (int) (Math.random() * (0x9fa5 - 0x4e00 + 1))));
module.setHobby(hobbys);
list.add(module);
}
String jsonString = JSON.toJSONString(list);
System.out.println(jsonString);
// [{"hobby":["随机爱好:武","随机爱好:畧"],"id":0,"name":"用户:0"},{"hobby":["随机爱好:穊","随机爱好:丠"],"id":1,"name":"用户:1"}]
}
@Test
void testMapToJson(){
HashMap<String, List<String>> map = new HashMap<>();
List<String> hobbys = new ArrayList<>();
hobbys.add("唱");
hobbys.add("跳");
hobbys.add("rap");
hobbys.add("篮球");
List<String> genders = new ArrayList<>();
genders.add("男");
genders.add("女");
map.put("爱好",hobbys);
map.put("性别",genders);
String jsonString = JSON.toJSONString(map);
System.out.println(jsonString);
// {"爱好":["唱","跳","rap","篮球"],"性别":["男","女"]}
}
//测试json字符串反序列化成Java对象
@Test
void testJsonToJava(){
String jsonString = "{\"hobby\":[\"唱歌\",\"书法\",\"三国演绎\"],\"id\":2,\"name\":\"张菲\"}";
JsonDetailModule jsonDetialModule = JSON.parseObject(jsonString, JsonDetailModule.class);
System.out.println(jsonDetialModule); //JsonDetailModule(id=2, name=张菲, hobby=[唱歌, 书法, 三国演绎])
}
@Test
void testJsonToList(){
String jsonString = " [{\"hobby\":[\"随机爱好:武\",\"随机爱好:畧\"],\"id\":0,\"name\":\"用户:0\"},{\"hobby\":[\"随机爱好:穊\",\"随机爱好:丠\"],\"id\":1,\"name\":\"用户:1\"}]";
List<JsonDetailModule> jsonDetailModules = JSON.parseArray(jsonString, JsonDetailModule.class);
System.out.println(jsonDetailModules);
// [JsonDetailModule(id=0, name=用户:0, hobby=[随机爱好:武, 随机爱好:畧]), JsonDetailModule(id=1, name=用户:1, hobby=[随机爱好:穊, 随机爱好:丠])]
for (JsonDetailModule item : jsonDetailModules) {
System.out.println(item);
}
// JsonDetailModule(id=0, name=用户:0, hobby=[随机爱好:武, 随机爱好:畧])
// JsonDetailModule(id=1, name=用户:1, hobby=[随机爱好:穊, 随机爱好:丠])
}
@Test
void testJsonToMap(){
String jsonString ="{\"爱好\":[\"唱\",\"跳\",\"rap\",\"篮球\"],\"性别\":[\"男\",\"女\"]}";
// JSONObject jsonObject = JSON.parseObject(jsonString);
//使用JSON.parseObject(jsonString)直接进行反序列化是没有泛型的,没有泛型是不安全的集合
//我们要求转后的集合必须有泛型
//因此,调用parseObject方法,还必须多穿一个TypeReference类型的参数,TypeReference类的泛型中,传递转换后的Map集合
Map<String, List<String>> map = JSON.parseObject(jsonString, new TypeReference<Map<String, List<String>>>(){});
for (String key: map.keySet()) {
System.out.println(key +":--:"+map.get(key));
}
// 爱好:--:[唱, 跳, rap, 篮球]
// 性别:--:[男, 女]
}
}