FastJson 是由阿里巴巴开源的 JSON 解析库,它可以进行快速的序列化和反序列化。功能还是很强大的。使用 fastjson 需要注意,转换的类必须有默认的无参构造函数。
Github:fastjson
fastjson 对于 JSON 字符串解析主要用到了下面三个类:
JSON:fastjson 的解析器,提供 toJSONString 和 parseObject 方法对 JSON 进行序列化和反序列化。
JSONObject:fastjson 提供的 json 对象。
JSONArray:fastjson 提供的 json 数组对象。
依赖
使用 fastjson 前,需要引入相关依赖。
<dependency><groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.61</version>
</dependency>
fastjson 工具类
public class FastJsonUtil{/**
* bean 转换为 Json 字符串
*/
public static String bean2json(Object object){
return JSON.toJSONString(object);
}
/**
* json 转换为 bean
*/
public static Object json2bean(String json,Class c){
return JSON.parseObject(json,c);
}
/**
* list 转换为 Json 字符串
*/
public static String list2json(List list){
return JSON.toJSONString(list);
}
/**
* json 转换为 list
*/
public static List json2List(String json,Class c){
return JSON.parseArray(json,c);
}
/**
* set 转换为 Json 字符串
*/
public static String set2json(Set set){
return JSON.toJSONString(set);
}
/**
* json 转换为 set
*/
public static Set json2Set(String json){
return JSON.parseObject(json,Set.class);
}
/**
* map 转换为 Json 字符串
*/
public static String map2json(Map map){
return JSON.toJSONString(map);
}
/**
* json 转换为 map
*/
public static Map json2Map(String json){
return JSON.parseObject(json);
}
}
实例代码
public class FastJsonTest {public static void main(String[] args) {
//1. bean 和 json 互转
Person person = new Person("xiaoli",18);
String json = FastJsonUtil.bean2json(person);
System.out.println(json);
Person person2 = (Person)FastJsonUtil.json2bean(json, Person.class);
System.out.println(person2.toString());
//2. list 和 json 互转
List<Person> list = new ArrayList<Person>();
list.add(new Person("李四",10));
list.add(new Person("王五",20));
String listJson = FastJsonUtil.list2json(list);
System.out.println(listJson);
List json2List = FastJsonUtil.json2List(listJson, Person.class);
System.out.println(json2List.toString());
//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 = FastJsonUtil.map2json(map);
System.out.println(mapJson);
Map<Object, Object> map2 = FastJsonUtil.json2Map(mapJson);
System.out.println(map2.toString());
//4. set 与 json 互转
Set<Person> set = new LinkedHashSet<Person>();
set.add(new Person("李四",10));
set.add(new Person("王五",20));
String setJson = FastJsonUtil.set2json(set);
System.out.println(setJson);
Set set1 = FastJsonUtil.json2Set(setJson);
System.out.println(set1.toString());
}
}
运行结果:
{"age":18,"name":"xiaoli"}
Person(name=xiaoli, age=18)
[{"age":10,"name":"李四"},{"age":20,"name":"王五"}]
[Person(name=李四, age=10), Person(name=王五, age=20)]
{"map2":{"age":20,"name":"王五"},"map1":{"age":10,"name":"李四"}}
{"map2":{"name":"王五","age":20},"map1":{"name":"李四","age":10}}
[{"age":10,"name":"李四"},{"age":20,"name":"王五"}]
[{"name":"王五","age":20}, {"name":"李四","age":10}]
小结
fastjson 虽然很快,我还是挺推荐使用的,但还是有些缺点的。具体详见:fastjson这么快老外为啥还是热衷 jackson?
总结我们对本篇文章做个总结:
什么是 JSON:数据交互语言,独立于任何程序语言的文本格式。
为什么使用 JSON:javaScript 原生支持 JSON,解析速度更快;比 xml 更易使用。
如何使用 JSON:
了解了 JSON 的数据结构:对象和数组。
Json 在 javaScript 中的使用:操作 json 对象和数组,通过 parse() 和 stringift() 实现 json 的反序列化和序列化。
Json 在 Java 中的使用:介绍了 Json-lib、Gson、Jackson 和 fastjson,并且对这些工具常用的序列化和反序列化的实现进行了封装。
对此,我们了解了 JSON,并且会对 JSON 进行序列化和反序列化。
参考
除了闹过腥风血雨的fastjson,你还知道哪些Java解析JSON的利器?
JSON入门看这一篇就够了
高性能JSON框架之FastJson的简单使用
fastjson 的使用总结
fastjson的基本使用方法