java的json处理器-fastjson

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

猜你喜欢

转载自ezbcw.iteye.com/blog/2202997