FastJson关于java的使用

介绍

Fastjson是阿里巴巴公司用Java语言编写的json 的编辑解析器,个人感觉非常好用。

官方网址:http://code.alibabatech.com/wiki/display/FastJSON/Home .
可以在此网站与开发人员交流和查看更新。

下载地址:http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/

号称速度最快的json解析:数据如下,

我也没测过,不知真假。

简要谈谈Json
Json全称JavaScript Object Notation ,是基于javascript的一个子集,是一种完全独立语言的格式。它能迅速的取代XML成为最受人欢迎的格式还是有它的原因的。
我们自己读Json要从大局观着手,有点耐心,先了解结构。

看看这个例子:

{
    "name":"中国",
   "province":[

   {
      "name":"黑龙江",
      "cities":{
   "city":["哈尔滨","大庆"]
    }
   },
     {
        "name":"广东",
        "cities":{
            "city":["广州","深圳","珠海"]
        }
    },
    {
        "name":"台湾",
        "cities":{
            "city":["台北","高雄"]
        }
    },
]
}

对于稍微是中国一点的人来说,这个例子很好懂,转化到Json,那么Json结构主要是两部分:
1,映射:映射就是冒号那种形式,如–>”name”:”中国”,
2,序列:就是并列存在的province里面的大括号是并列的,city里面 的城市也是并列的。映射到程序里相当于数组。

很多人说json就是键值对,很准确,更准确的是键值对套键值对,通常叫key-value对。
Key只能是string类型的,例如上面的name,city,province。

但是,value类型有很多,从简单到复杂:
A: 基本类型(int,long,String).
B: 对象类型:对应程序将就是大括号,属于自定义的部分,里面还是Json类型。
C:序列类型:对应程序就是中括号,比如city后面的。。里面的属性是value类型,还可以套Json。

总的讲,写一个Json写无数的键值对拼接起来。
代码示例
Fastjson就是通过上面对json 的看法,将json的每个value对都映射到java对象中,达到转化的目的。
代码讲解
生成Json
Fastjson是通过java对象来产生json的,我们来一步一步分析这个java对象是怎么产生的。
1,最外层大括号

指一个对象,包含String属性的 name和province属性的province,province后面接的是一个中括号,那么这是一个array对象,我们把它定为List<Province>province;

2, 容我懒惰,以此类推

在对象Province中的city是一个数组:String[] city,当然写成list也没有关系。
    import java.util.List;  

    public class China {   
        private String name;  
        private List<Province>province;  

        public String getName() {  
            return name;  
        }  

        public void setName(String name) {  
            this.name = name;  
        }  

        public List<Province> getProvince() {  
            return province;  
        }  

        public void setProvince(List<Province> province) {  
            this.province = province;  
        }  

    }  
    public class Province {  

        private City citys;  
        private String name;  


        public String getName() {  
            return name;  
        }  

        public void setName(String name) {  
            this.name = name;  
        }  

        public City getCitys() {  
            return citys;  
        }  

        public void setCitys(City citys) {  
            this.citys = citys;  
        }  

    }  
    public class City {  
        private String[]city;  

        public String[] getCity() {  
            return city;  
        }  

        public void setCity(String[] city) {  
            this.city = city;  
        }  
    }  

最后,测试一下:

    public static void main(String[] args) {  
            China china = new China();  
            china.setName("中国");  
            List<Province> provinces = new ArrayList<>();  

            Province hei = new Province();  
            hei.setName("黑龙江");  
            City heiCity = new City();  
            heiCity.setCity(new String[] { "哈尔滨", "大庆" });  
            hei.setCitys(heiCity);  
            provinces.add(hei);  

            Province guang = new Province();  
            guang.setName("广东");  
            City guangCity = new City();  
            guangCity.setCity(new String[] { "广州", "深圳", "珠海" });  
            guang.setCitys(guangCity);  
            provinces.add(guang);  

            Province tai = new Province();  
            tai.setName("台湾");  
            City taiCity = new City();  
            taiCity.setCity(new String[] { "台北", "高雄 " });  
            tai.setCitys(taiCity);  
            provinces.add(tai);  

            china.setProvince(provinces);  

            String result=JSON.toJSONString(china);  

结果:

    {"name":"中国"  
    "province":[  
    {"citys":{"city":["哈尔滨","大庆"]},"name":"黑龙江"},  
    {"citys":{"city":["广州","深圳","珠海"]},"name":"广东"},  
    {"citys":{"city":["台北","高雄 "]},"name":"台湾"}  
    ]  
    }  

结果的list和array 的顺序是有序的,但是并列的键值对顺序是按照key 的首字母ASCII 顺序排列的。

Json转化为对象

和上述转化同理,列好了相对应的类,转化很方便。

在上面测试代码后面加一句

    .....  
        String result=JSON.toJSONString(china);//转成json 字符串  
        System.out.println(result);  

        China c2=JSON.parseObject(result, China.class);//转成对象  

注意的部分:
1,对象中想转化为json 的属性,必须拥有get方法。get方法的规范,方法名get后面的单词第一个字母要大写。
2,key 的部分的属性名称(如:”name”)是基于类中该属性get方法方法名的那个单词产生的,只是把第一个字母的大写变成小写。

转化时属性的过滤
在对象生成json字符串时,只想转化一部分的属性,其他的不转化,怎么做呢?将上面转化的地方代码,替换如下:

    SimplePropertyPreFilter filter = newSimplePropertyPreFilter(China.class, "name");  
    String result = JSON.toJSONString(china, filter);  

结果:

    {"name":"中国"}  

注意:这个过滤是保留这部分内容,而不是过滤掉这部分内容!

使用注解

1.在某些场景,你可能需要定制序列化输出,比如说,希望序列化采用之后采用”ID”,而不是”id”,你可以使用@JSONField这个Annotation。

public class User {
@JSONField(name=”ID”)
public int getId() { … }
}

User user = …;
JSON.toJSONString(user); // {“ID”:234}

这样原本是id的标签变成了ID。

2.该字段不进行序列化。
@JSONField(serialize = false)
public int getId() { … }

3.对时间字段进行格式化处理,不处理是时间戳格式。
@JSONField (format=”yyyy-MM-dd”)
public Date getDate() { … }

转自:http://blog.csdn.net/yunxiaoxiaoyun/article/details/16811973

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值