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

0 0