fastjson是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.5</version> </dependency>
主要特点:
快速 (比其它任何基于Java的解析器和生成器更快,包括jackson)
强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
零依赖(没有依赖其它任何类库除了JDK)
客户端经常需要和服务端进行通信,目前很多项目都采用JSON的方式进行数据传输。
我在网上看了一些开源的JSON框架,比如Google提供的Gson,Jackson,FastJson等框架。
FastJson执行效率比较高,而且简单易用。
FastJson不依赖于第三方包,直接可以运行在Java JDK1.5之上,FastJson完全支持http://json.org的标准,支持各种JDK类型,包括基本类型、JavaBean、Collection、Map、Enum、泛型等,还支持循环引用。
FastJson项目是开源的:Fastjson代码托管在github.org上,项目地址是 https://github.com/AlibabaTech/fastjson
一个JSON库涉及的最基本功能就是序列化和反序列化。
使用com.alibaba.fastjson.JSON这个类进行序列化和反序列化。
常用的序列化操作都可以在JSON类上的静态方法直接完成。
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
public static final T parseObject(String text, Class clazz); // 把JSON文本parse为JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final List parseArray(String text, Class clazz); //把JSON文本parse成JavaBean集合
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。
序列化
public class User {
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Group {
private List<User> users = new ArrayList<User>();
private Long id;
private String name;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
Group group = new Group();
group.setId(0L);
group.setName("admin");
User user1 = new User();
user1.setAge(23);
user1.setName("张三");
User user2 = new User();
user2.setAge(24);
user2.setName("李四");
group.getUsers().add(user1);
group.getUsers().add(user2);
String jsonString = JSON.toJSONString(group);
System.out.println(jsonString);
}
输出结果:
{"id":0,"name":"admin","users":[{"age":23,"name":"张三"},{"age":24,"name":"李四"}]}
public static void main(String[] args) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("username", "zhangsan");
map.put("age", 24);
map.put("sex", "男");
// map集合
HashMap<String, Object> temp = new HashMap<String, Object>();
temp.put("name", "xiaohong");
temp.put("age", "23");
map.put("girlInfo", temp);
// list集合
List<String> list = new ArrayList<String>();
list.add("爬山");
list.add("骑车");
list.add("旅游");
map.put("hobby", list);
/*
* JSON 序列化,默认序列化出的JSON字符串中键值对是使用双引号,如果需要单引号的JSON字符串, [eg:String
* jsonString = JSON.toJSONString(map,
* SerializerFeature.UseSingleQuotes);]
* fastjson序列化时可以选择的SerializerFeature有十几个属性,你可以按照自己的需要去选择使用。
*/
String jsonString = JSON.toJSONString(map);
System.out.println("JSON=" + jsonString);
}
输出结果:
JSON={"sex":"男","username":"zhangsan","age":24,"hobby":["爬山","骑车","旅游"],"girlInfo":{"age":"23","name":"xiaohong"}}
默认null是不会输出到JSON串的。
public static void main(String[] args) {
Group group = new Group();
group.setId(0L);
group.setName(null);
String jsonString = JSON.toJSONString(group);
// 默认null是不会写到JSON串的,如果要把null写入JSON串,可以使用SerializerFeature.WriteMapNullValue属性
// String jsonString = JSON.toJSONString(group,
// SerializerFeature.WriteMapNullValue);
// {"id":0,"name":null,"users":[]}
System.out.println(jsonString);
}
输出结果:
{"id":0,"name":"","users":[]}
反序列化
public static void main(String[] args) {
String json = "{\"name\":\"张山\",\"age\":24}";
// 反序列化
User userInfo = JSON.parseObject(json, User.class);
System.out.println("name:" + userInfo.getName() + ", age:"
+ userInfo.getAge());
json = "{\"user\":{\"name\":\"李四\",\"age\":25}}";
Map<String, User> map = JSON.parseObject(json,
new TypeReference<Map<String, User>>() {
});
System.out.println(map.get("user").getAge());
}
//JSONArray使用
public static void main(String []args)
{
String json = "[{\"a\":\"111\",\"b\":\"222\",\"c\":\"333\"},{\"a\":\"1000\",\"b\":\"2000\",\"c\":\"000\"},{\"a\":\"999\",\"b\":\"300\",\"c\":\"700\"}]";
JSONArray jsonArr = JSONArray.fromObject(json);
String a[] = new String[jsonArr.size()];
String b[] = new String[jsonArr.size()];
String c[] = new String[jsonArr.size()];
for (int i = 0; i < jsonArr.size(); i++) {
a[i] = jsonArr.getJSONObject(i).getString("a");
b[i] = jsonArr.getJSONObject(i).getString("b");
c[i] = jsonArr.getJSONObject(i).getString("c");
}
for (int i = 0; i < c.length; i++) {
System.out.print(a[i]+" ");
System.out.print(b[i]+" ");
System.out.print(c[i]);
System.out.println();
}
}
//JSONObject的使用
private static JSONObject createJSONObject(){
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "kevin");
jsonObject.put("Max.score", new Integer(100));
jsonObject.put("Min.score", new Integer(50));
jsonObject.put("nickname", "picglet");
return jsonObject;
}
Map m=new HashMap();
m.put("a","1");
m.put("b","");
m.put("c",null);
m.put("d",0);
默认null不输出
JSON j=(JSON)JSON.toJSON(m);
System.out.println(j);
//1.输出结果:{"a":"1","b":"","d":0}
如果想输出null,可以使用SerializerFeature参数
String js=JSON.toJSONString(m,SerializerFeature.WriteMapNullValue);
System.out.println(js);
//2.输出结果:{"a":"1","b":"","c":null,"d":0}
使用这个方法:toJSONBytes(Object object, SerializerFeature... features)
在SerializerFeature中配置SerializerFeature.WriteMapNullValue,WriteNullStringAsEmpty