json之FastJson解析

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值