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