fastjson的使用
一、JSON(JavaScript OjectNotation)是一种轻量级的数据交换方式。易于人的阅读和编写。也正是由于Json格式数据的简单和易用性,越来越多的开发者开始使用Json,以此同时,很多公司也封装了一套自己的Json框架,用来实现Json格式数据的转换,比如Google的Gson,阿里巴巴的FastJson,IBM的Json4J等。这里只介绍阿里巴巴的FastJson的使用。
二、阿里巴巴的FastJson包是一个处理Json的工具包,包括了“序列化”和“反序列化”,号称是目前速度最快,性能最佳,功能强大的工具,完全支持Java Bean,集合,Map,日期,Enum,泛型,自省,无依赖,能够运行在JavaSE5.0以上的版本。
三、Fastjson Api的导入包是com.alibaba.fastjson.JSON,常用的序列化静态方法有如下:
/** 把JSON文本parse为JSONObject或者JSONArray */
public static final Object parse(String text);
/** 把JSON文本parse成JSONObject */
public static final JSONObject parseObject(String text);
/** 把JSON文本parse为JavaBean */
public static final T parseObject(String text, Class clazz);
/** 把JSON文本parse成JSONArray */
public static final JSONArray parseArray(String text);
/** 把JSON文本parse成JavaBean集合 */
public static final List parseArray(String text, Class clazz);
/** 将JavaBean序列化为JSON文本 */
public static final String toJSONString(Object object);
/** 将JavaBean序列化为带格式的JSON文本 */
public static final String toJSONString(Object object, boolean prettyFormat);
/** 将JavaBean转换为JSONObject或者JSONArray */
public static final Object toJSON(Object javaObject);
四、FastJson使用例子
1、解析json字符串
有Json格式字符串如下:
{\”title\”: \”普京视察柔道队 被一倔姑娘撂倒两次\”,\”ptime\”: \”2016-01-11 07:11:55\”,\”sourse\”: \”光明网\”,\”editor\”: \”老米\”,\”digest\”: \”年逾六旬的普京身穿柔道服,腰系黑带,面带笑容。\”}
现在依据Json的key值写一个javaBean对象:
public class ANews {
private String title;
private String ptime;
private String source;
private String editor;
private String digest;
}
为了文章简洁,省略了ANews对象的getters和setters方法。接着可以使用
ANews anewsBean = JSON.parseObject(anewsJs, ANews.class);
将Json字符串序列化为ANews对象。详细源码如下:
String anewsJs = "{\"title\": \"普京视察柔道队 被一倔姑娘撂倒两次\","
+ "\"ptime\": \"2016-01-11 07:11:55\","
+ "\"source\": \"光明网\",\"editor\": \"老米\","
+ "\"digest\": \"年逾六旬的普京身穿柔道服,腰系黑带,面带笑容。\"}";
ANews anewsBean = JSON.parseObject(anewsJs, ANews.class);
StringBuilder sbBean = new StringBuilder();
sbBean.append("JSON.parseObject(String,Class) ===>")
.append("\ntitle=" + anewsBean.getTitle())
.append("\nptime=" + anewsBean.getPtime())
.append("\nsource=" + anewsBean.getSource())
.append("\neditor=" + anewsBean.getEditor())
.append("\ndigest=" + anewsBean.getDigest()).append("\n");
System.out.println(sbBean.toString());
System.out.println("JSON.toJSONString(object) ===>\n"
+ JSON.toJSONString(anewsBean) + "\n");
JSONObject anewsJObject = JSON.parseObject(anewsJs);
StringBuilder sb = new StringBuilder();
sb.append("JSON.parseObject(String) ===>")
.append("\ntitle=" + anewsJObject.getString("title"))
.append("\nptime=" + anewsJObject.getString("ptime"))
.append("\nsource=" + anewsJObject.getString("source"))
.append("\neditor=" + anewsJObject.getString("editor"))
.append("\ndigest=" + anewsJObject.getString("digest"))
.append("\n");
System.out.println(sb.toString());
输出结果如下
使用FastJson很简单,轻轻松松的就可以拿到Json包含的信息,不需要用JsonObject对每一个key值做存在性判定,再取出对应的值。
使用FastJson编写bean对象时要注意,bean对象的成员变量对应着Json字符串的key值,FastJson的容错性也是做得不错的,bean对象的成员变量在Json String里没有时,会得到该类型对应的默认值。例如,由于笔误将上述的bean里的source参数写成了sourse,由于解析的json string里只有source,没有sourse,使用parseObject(String text, Class clazz)解析也是完全没有问题的,得到的bean对象的sourse的值是null。
2、解析Json String数组
同样使用parseObject(String text, Class class)解析json string数组,使用的方法以让是添加一个bean类,json string数组中的key要与bean中的成员变量对应,例如有json string数组如下:
{"news":[{\"title\": \"清华女博士回老家开乡村咖啡馆:圆了“少女梦”\",\"ptime\": \"2016-01-11 07:39\",\"sourse\": \"成都商报\",\"editor\": \"王明平\",\"digest\": \"绵竹市孝德镇年画村里,一家乡村咖啡馆热热闹闹开张了.\"},{\"title\": \"普京视察柔道队 被一倔姑娘撂倒两次\",\"ptime\": \"2016-01-11 07:11:55\",\"sourse\": \"光明网\",\"editor\": \"老米\",\"digest\": \"年逾六旬的普京身穿柔道服,腰系黑带,面带笑容。\"}]}
需要新添加一个News类
public class News {
private List<ANews> news;
public List<ANews> getNews() {
return news;
}
public void setNews(List<ANews> news) {
this.news = news;
}
}
调用解析方法如下:
News newsList = JSON.parseObject(anewsJs, News.class);
System.out.println("JSON.parseObject(String,Class) ===>");
for (ANews aNews : newsList.getNews()) {
StringBuilder sbBean = new StringBuilder();
sbBean.append("title=" + aNews.getTitle())
.append("\nptime=" + aNews.getPtime())
.append("\nsource=" + aNews.getSource())
.append("\neditor=" + aNews.getEditor())
.append("\ndigest=" + aNews.getDigest()).append("\n\n");
System.out.println(sbBean.toString());
}
输出结果如下:
哈哈,使用FastJson后,解析Json立马变得非常的简单,快捷。我这里使用的FastJson版本是fastjson-1.1.36.jar,
下载链接是:http://download.csdn.net/detail/peak1chen/9398942