FastJson小结

Fastjson介绍
Fastjson是一个Java语言编写的JSON处理器。
1、遵循 http://json.org标准,为其官方网站收录的参考实现之一。
2、功能qiang打,支持JDK的各种类型,包括基本的JavaBean、Collection、Map、Date、Enum、泛型。
3、无依赖,不需要例外额外的jar,能够直接跑在JDK上。
4、开源,使用Apache License 2.0协议开源。 http://code.alibabatech.com/wiki/display/FastJSON/Home
 
2、主要的使用入口
 
Fastjson API入口类是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> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean 
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
public static final <T> List<T> parseArray(String text, Class<T> 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 static final <T> T toJavaObject(JSON json, Class<T> clazz) ; //将JsonObject转换为JavaBean
 
 
 
3、有关类库的一些说明
 
SerializeWriter:相当于StringBuffer
JSONArray:相当于List<Object>
JSONObject:相当于Map<String, Object>
 
JSON反序列化没有真正数组,本质类型都是List<Object>
 
4、fastjson还有很多很高级的特性,比如支持注解、支持全类型序列化,这些都是很好的特性,功能强大,不在本次测试范围。
 
下面是一个基于fastJson的json序列化例子
private static class JsonZkSerializer implements ZkSerializer {
		private static Logger logger = Logger.getLogger(JsonZkSerializer.class);

		@Override
		public byte[] serialize(Object data) throws ZkMarshallingError {
			try {
				String type = data.getClass().getName();
				Object jsonObject = JSON.toJSON(data);
				JSONObject json = new JSONObject();
				json.put("classType", type);
				json.put("data", jsonObject);
				return json.toJSONString().getBytes();
			} catch (Exception e) {
				logger.error("JsonZkSerializer serialize error", e);
				return null;
			}
		}

		@Override
		public Object deserialize(byte[] bytes) throws ZkMarshallingError {
			try {
				String jsonStr = new String(bytes);
				JSONObject json = (JSONObject) JSON.parse(jsonStr);
				Class classType = Class.forName(json.get("classType").toString());
				System.out.println(classType);
				return JSON.toJavaObject((JSON) json.get("data"), classType);

			} catch (Exception e) {
				logger.error(e);
				return null;
			}
		}
	}
 
 
Map<String, Map<String, Integer>> timeSpanData = new HashMap<String, Map<String, Integer>>();
		timeSpanData.put("test1", new HashMap<String, Integer>());
		timeSpanData.get("test1").put("v1", 1);
		timeSpanData.put("test2", new HashMap<String, Integer>());
		timeSpanData.get("test2").put("v2", 1);
		timeSpanData.put("test3", new HashMap<String, Integer>());
		timeSpanData.get("test3").put("v3", 1);
		System.out.println(timeSpanData);
		String str = JSON.toJSONString(timeSpanData);
		System.out.println(str);

		timeSpanData = new HashMap<String, Map<String, Integer>>();
		JSONObject appJson = JSON.parseObject(str);
		for (String appName : appJson.keySet()) {
			JSONObject serviceJson = (JSONObject) appJson.get(appName);
			timeSpanData.put(appName, new HashMap<String, Integer>());
			for (String rpcName : serviceJson.keySet()) {
				timeSpanData.get(appName).put(rpcName, serviceJson.getInteger(rpcName));
			}
		}
		System.out.println(timeSpanData);
 

猜你喜欢

转载自san-yun.iteye.com/blog/1984365