示例代码:
public class JsonlibTest {public static void main(String[] args) {
//1. bean 和 json 互转
Person person = new Person("xiaoli",18);
String json = JsonLibUtils.bean2json(person);
// {"age":18,"name":"xiaoli"}
Person person2 = (Person)JsonLibUtils.json2bean(json, Person.class);
//2. list 和 json 互转
List<Person> list = new ArrayList<Person>();
list.add(new Person("李四",10));
list.add(new Person("王五",20));
String listJson = JsonLibUtils.list2json(list);
// [{"age":10,"name":"李四"},{"age":20,"name":"王五"}]
List json2List = JsonLibUtils.json2List(listJson);
//3. map 转 json
Map<String,Person> map = new HashMap<String,Person>();
map.put("map1",new Person("李四",10));
map.put("map2",new Person("王五",20));
String mapJson = JsonLibUtils.map2json(map);
// {"map2":{"age":20,"name":"王五"},"map1":{"age":10,"name":"李四"}}
Map<Object, Object> map2 = JsonLibUtils.json2Map(mapJson);
//4. set 与 json 互转
Set<Person> set = new LinkedHashSet<Person>();
set.add(new Person("李四",10));
set.add(new Person("王五",20));
String setJson = JsonLibUtils.set2json(set);
// [{"age":10,"name":"李四"},{"age":20,"name":"王五"}]
JsonLibUtils.json2Set(setJson);
}
}
缺点
依赖的包过多。
复杂类型的转换有缺陷,比如一个类里面会出现另一个类的list或者map集合,json-lib从json到bean的转换就会出现问题。
不推荐使用 Json-lib 的 n 个理由
小结
json-lib 提供两个对象,分别是 JSONObject 和 JSONArray,分别对应着 JSON 的两个数据结构。根据需要选取转换的对象。但是由于 json-lib 已经 n 多年没有维护,缺陷较多,在功能和性能方面已经无法满足我们的需求,所以尽量还是不用为好。
GsonGson 是 Google 公司发布的一个开源代码的 Java 库,主要用途为序列化 Java 对象为 JSON 字符串,或反序列化 JSON 字符串为 Java 对象。
Gson 提供了 fromJson()和 toJson() 两个用于解析和生成的方法,前者实现反序列化,后者实现了序列化。
依赖
使用 Gson 需要引入这个依赖。
<dependency><groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
<scope>compile</scope>
</dependency>
Gson 工具类
封装一些常用方法的转换工具类。
public class GsonUtil {/**
* bean 转换为 Json 字符串
*/
public static String bean2json(Object object){
Gson gson = new Gson();
return gson.toJson(object);
}
/**
* json 转换为 bean
*/
public static Object json2bean(String json,Class c){
Gson gson = new Gson();
return gson.fromJson(json,c);
}
/**
* list 转换为 Json 字符串
*/
public static String list2json(List list){
Gson gson = new Gson();
return gson.toJson(list);
}
/**
* json 转换为 list
*/
public static List json2List(String json){
Gson gson = new Gson();
return gson.fromJson(json,new TypeToken<List>(){}.getType());
}
/**
* set 转换为 Json 字符串
*/
public static String set2json(Set set){
Gson gson = new Gson();
return gson.toJson(set);
}
/**
* json 转换为 set
*/
public static Set json2Set(String json){
Gson gson = new Gson();
return gson.fromJson(json,new TypeToken<Set>(){}.getType());
}
/**
* map 转换为 Json 字符串
*/
public static String map2json(Map map){
Gson gson = new Gson();
return gson.toJson(map);
}
/**
* json 转换为 map
*/
public static Map json2Map(String json){
Gson gson = new Gson();
return gson.fromJson(json,new TypeToken<Map>(){}.getType());
}
}