fastJson 源自著名的阿里巴巴开源项目,是一个性能很好的 Java 语言实现的 JSON 解析器和生成器。
主要特点:
快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson)
强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
零依赖(没有依赖其它任何类库除了JDK)
github地址:
https://github.com/alibaba/fastjson
oschina地址:
http://www.oschina.net/p/fastjson
依赖包
fastjson-1.2.2.jar
测试代码:
1、 Json格式字符串转java对象
@Test
public void test2(){
try {
String jsonstr="{\"age\":22,\"id\":\"54e6fa76-1558-41bd-9195-413267674da8\",\"name\":\"张三\"}";
Student s=JSON.parseObject(jsonstr, Student.class);
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
2、json格式字符串转复杂java对象
@Test
public void test3(){
try {
String jsonstr="{\"age\":22,\"book\":{\"bookdes\":\"一本xxx\",\"bookid\":\"18d16c8e-6d47-4c60-8395-c683389110c5\",\"bookname\":\"java编程思想\",\"bookprice\":24},\"booklist\":[{\"bookdes\":\"一本好书0\",\"bookid\":\"7a5f750b-6899-422b-a25d-f18349ed3553\",\"bookname\":\"java编程思想0\",\"bookprice\":24},{\"bookdes\":\"一本好书1\",\"bookid\":\"858b88c7-976b-47bb-97a5-d09addb1311a\",\"bookname\":\"java编程思想1\",\"bookprice\":25},{\"bookdes\":\"一本好书2\",\"bookid\":\"c864fd16-1fd0-42a1-941d-e60e381661aa\",\"bookname\":\"java编程思想2\",\"bookprice\":26}],\"id\":\"468ba26c-ada0-4cb3-9b7a-7a7d23d8a203\",\"name\":\"张三\"}";
Student s= JSON.parseObject(jsonstr, Student.class);
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
3、java中复杂对象转json字符串
@Test
public void test1(){
try {
Student student= new Student();
student.setId(UUID.randomUUID().toString());
student.setName("张三");
student.setAge(22);
List<Book> booklist=new ArrayList<Book>();
for(int i=0;i<3;i++){
Book b=new Book();
b.setBookdes("一本好书"+i);
b.setBookid(UUID.randomUUID().toString());
b.setBookname("java编程思想"+i);
b.setBookprice(24+i);
booklist.add(b);
}
Book b=new Book();
b.setBookdes("一本xxx");
b.setBookid(UUID.randomUUID().toString());
b.setBookname("java编程思想");
b.setBookprice(24);
student.setBook(b);
student.setBooklist(booklist);
String jsonstr= JSON.toJSONString(student);
System.out.println(jsonstr);
} catch (Exception e) {
e.printStackTrace();
}
}
4、java中List集合转json字符串
@Test
public void test4(){
List<Book> booklist=new ArrayList<Book>();
for(int i=0;i<3;i++){
Book b=new Book();
b.setBookdes("一本好书"+i);
b.setBookid(UUID.randomUUID().toString());
b.setBookname("java编程思想"+i);
b.setBookprice(24+i);
booklist.add(b);
}
String str=JSON.toJSONString(booklist);
System.out.println(str);
}
5、json格式数组转java集合
@Test
public void test5(){
try {
String str="[{\"bookdes\":\"一本好书0\",\"bookid\":\"45f1bded-c770-40cc-a1b8-e777133a83f1\",\"bookname\":\"java编程思想0\",\"bookprice\":24},{\"bookdes\":\"一本好书1\",\"bookid\":\"af6465be-4754-4032-9d03-2ad15ce07dcd\",\"bookname\":\"java编程思想1\",\"bookprice\":25},{\"bookdes\":\"一本好书2\",\"bookid\":\"e94f59c5-9920-4127-a9d0-ad058af07820\",\"bookname\":\"java编程思想2\",\"bookprice\":26}]";
List<Map> booklist=JSON.parseArray(str, Map.class);
System.out.println(booklist);
} catch (Exception e) {
e.printStackTrace();
}
}
FastJson在将java中对象转字符串过程中还能使用一些序列化的特性参数。如
SerializerFeature.WriteMapNullValue 表示序列化map时,即使map中key的的值null也序列化这个key。
SerializerFeature.WriteNullNumberAsZero 数值字段如果为null,输出为0,而非null, 默认为false
SerializerFeature.QuoteFieldNames 输出key时是否使用双引号,默认为true 使用双引号
SerializerFeature.WriteNullListAsEmpty List字段如果为null,输出为[],而非null 默认为false
SerializerFeature.WriteNullStringAsEmpty 字符类型字段如果为null,输出为"",而非null
SerializerFeature.WriteNullBooleanAsFalse Boolean字段如果为null,输出为false,而非null
此外,经笔者测试,fastJson 还能自动将json串中日期格式毫秒数字、日期格式字符串转为java对象中的Date类型。
比如User类中有个birthday属性是Date类型的,而前端传参时传递的日期可以是个数字(毫秒值),或者是日期字符串如‘1993-08-08’
在java中使用fastJson依然能够正确地解析。不禁让人感叹。。。
fastJson实在是优秀、太神奇了!!!