json之FastJson解析
来源:互联网 发布:木器漆品牌 知乎 编辑:程序博客网 时间:2024/06/05 04:06
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
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- Json解析之FastJson
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- 解析json 之fastjson
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- JSON 之FastJson解析
- toolbar使用时显示AppCompat does not support the current theme features: { windowActionBar: false, windowA
- 城市重建(网络流)
- 计算机视觉资源汇集
- 解决SecureCRT连接linux超时后断开[转] ,配色
- window10某个文件夹打不开,崩溃,卡死
- json之FastJson解析
- Web service的common sense
- Stanford NLP Chinese(中文)的使用
- fatal error: mysql.h: No such file or directory
- Android之AsyncTask两种线程池分析和总结
- maven学习-settings配置
- r语言入门常用函数
- ASP.Net学习笔记001--ASP.Net简介1
- Eclipse 编译StanfordNLP