亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    Fastjson 簡(jiǎn)明教程


    Fastjson 簡(jiǎn)介

    Fastjson 是一個(gè) Java 庫(kù),可以將 Java 對(duì)象轉(zhuǎn)換為 JSON 格式,當(dāng)然它也可以將 JSON 字符串轉(zhuǎn)換為 Java 對(duì)象。

    Fastjson 可以操作任何 Java 對(duì)象,即使是一些預(yù)先存在的沒(méi)有源碼的對(duì)象。

    Fastjson 源碼地址:https://github.com/alibaba/fastjson

    Fastjson 中文 Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN


    Fastjson 特性

    • 提供服務(wù)器端、安卓客戶端兩種解析工具,性能表現(xiàn)較好。
    • 提供了 toJSONString() 和 parseObject() 方法來(lái)將 Java 對(duì)象與 JSON 相互轉(zhuǎn)換。調(diào)用toJSONString方 法即可將對(duì)象轉(zhuǎn)換成 JSON 字符串,parseObject 方法則反過(guò)來(lái)將 JSON 字符串轉(zhuǎn)換成對(duì)象。
    • 允許轉(zhuǎn)換預(yù)先存在的無(wú)法修改的對(duì)象(只有class、無(wú)源代碼)。
    • Java泛型的廣泛支持。
    • 允許對(duì)象的自定義表示、允許自定義序列化類。
    • 支持任意復(fù)雜對(duì)象(具有深厚的繼承層次和廣泛使用的泛型類型)。

    Fastjson 簡(jiǎn)明教程


    下載和使用

    你可以在 maven 中央倉(cāng)庫(kù)中直接下載:

    http://repo1.maven.org/maven2/com/alibaba/fastjson/

    或者配置 maven 依賴:

    <dependency>      <groupId>com.alibaba</groupId>      <artifactId>fastjson</artifactId>      <version>x.x.x</version>  </dependency>

    其中 x.x.x 是版本號(hào),根據(jù)需要使用特定版本,建議使用最新版本。


    將 Java 對(duì)象轉(zhuǎn)換為 JSON 格式

    定義以下 Person JavaBean:

    public class Person {             @JSONField(name = "AGE")      private int age;         @JSONField(name = "FULL NAME")      private String fullName;         @JSONField(name = "DATE OF BIRTH")      private Date dateOfBirth;         public Person(int age, String fullName, Date dateOfBirth) {          super();          this.age = age;          this.fullName= fullName;          this.dateOfBirth = dateOfBirth;      }         // 標(biāo)準(zhǔn) getters & setters  }

    可以使用 JSON.toJSONString() 將 Java 對(duì)象轉(zhuǎn)換換為 JSON 對(duì)象:

    private List<Person> listOfPersons = new ArrayList<Person>();     @Before  public void setUp() {      listOfPersons.add(new Person(15, "John Doe", new Date()));      listOfPersons.add(new Person(20, "Janette Doe", new Date()));  }     @Test  public void whenJavaList_thanConvertToJsonCorrect() {      String jsonOutput= JSON.toJSONString(listOfPersons);  }

    輸出結(jié)果為:

    [        {            "AGE":15,          "DATE OF BIRTH":1468962431394,          "FULL NAME":"John Doe"      },      {            "AGE":20,          "DATE OF BIRTH":1468962431394,          "FULL NAME":"Janette Doe"      }  ]

    我們還可以自定義輸出,并控制字段的排序,日期顯示格式,序列化標(biāo)記等。

    接下來(lái)我們更新 bean 并添加幾個(gè)字段:

    @JSONField(name="AGE", serialize=false)  private int age;     @JSONField(name="LAST NAME", ordinal = 2)  private String lastName;     @JSONField(name="FIRST NAME", ordinal = 1)  private String firstName;     @JSONField(name="DATE OF BIRTH", format="dd/MM/yyyy", ordinal = 3)  private Date dateOfBirth;

    以上代碼中我們列出了基本參數(shù)類別,并使用 @JSONField 注解,以便實(shí)現(xiàn)自定義轉(zhuǎn)換:

    • format 參數(shù)用于格式化 date 屬性。
    • 默認(rèn)情況下, FastJson 庫(kù)可以序列化 Java bean 實(shí)體, 但我們可以使用 serialize 指定字段不序列化。
    • 使用 ordinal 參數(shù)指定字段的順序

    這樣,以上輸出結(jié)果為:

    [      {          "FIRST NAME":"Doe",          "LAST NAME":"Jhon",          "DATE OF BIRTH":"19/07/2016"      },      {          "FIRST NAME":"Doe",          "LAST NAME":"Janette",          "DATE OF BIRTH":"19/07/2016"      }  ]

    @JSONField

    @JSONField 的作用對(duì)象:

    • 1. Field
    • 2. Setter 和 Getter 方法

    注意:FastJson 在進(jìn)行操作時(shí),是根據(jù) getter 和 setter 的方法進(jìn)行的,并不是依據(jù) Field 進(jìn)行。

    注意:若屬性是私有的,必須有 set 方法。否則無(wú)法反序列化。

    package com.alibaba.fastjson.annotation;    public @interface JSONField {      // 配置序列化和反序列化的順序,1.1.42版本之后才支持      int ordinal() default 0;         // 指定字段的名稱      String name() default "";        // 指定字段的格式,對(duì)日期格式有用      String format() default "";        // 是否序列化      boolean serialize() default true;        // 是否反序列化      boolean deserialize() default true;  }

    2. JSONField配置方式

    FieldInfo 可以配置在 getter/setter 方法或者字段上。例如:

    2.1 配置在 getter/setter 上

       public class A {        private int id;           @JSONField(name="ID")        public int getId() {return id;}        @JSONField(name="ID")        public void setId(int value) {this.id = id;}  }  

    2.2 配置在 field 上

       public class A {        @JSONField(name="ID")        private int id;           public int getId() {return id;}        public void setId(int value) {this.id = id;}   }  

    3. 使用format配置日期格式化

     public class A {        // 配置date序列化和反序列使用yyyyMMdd日期格式        @JSONField(format="yyyyMMdd")        public Date date;   }

    4. 使用 serialize/deserialize 指定字段不序列化

    public class A {        @JSONField(serialize=false)        public Date date;   }     public class A {        @JSONField(deserialize=false)        public Date date;   }

    5. 使用 ordinal 指定字段的順序

    缺省 fastjson 序列化一個(gè) java bean,是根據(jù) fieldName 的字母序進(jìn)行序列化的,你可以通過(guò) ordinal 指定字段的順序。這個(gè)特性需要 1.1.42 以上版本。

    public static class VO {      @JSONField(ordinal = 3)      private int f0;        @JSONField(ordinal = 2)      private int f1;        @JSONField(ordinal = 1)      private int f2;  }

    FastJson 還支持 BeanToArray 序列化功能:

    String jsonOutput= JSON.toJSONString(listOfPersons, SerializerFeature.BeanToArray);

    輸出結(jié)果為:

    [      [          15,          1469003271063,          "John Doe"      ],      [          20,          1469003271063,          "Janette Doe"      ]  ]

    創(chuàng)建 JSON 對(duì)象

    創(chuàng)建 JSON 對(duì)象非常簡(jiǎn)單,只需使用 JSONObject(fastJson提供的json對(duì)象) 和 JSONArray(fastJson提供json數(shù)組對(duì)象) 對(duì)象即可。

    我們可以把JSONObject 當(dāng)成一個(gè) Map<String,Object> 來(lái)看,只是 JSONObject 提供了更為豐富便捷的方法,方便我們對(duì)于對(duì)象屬性的操作。我們看一下源碼。

    Fastjson 簡(jiǎn)明教程

    同樣我們可以把 JSONArray 當(dāng)做一個(gè) List<Object>,可以把 JSONArray 看成 JSONObject 對(duì)象的一個(gè)集合。

    Fastjson 簡(jiǎn)明教程

    此外,由于 JSONObject 和 JSONArray 繼承了 JSON,所以說(shuō)也可以直接使用兩者對(duì) JSON 格式字符串與 JSON 對(duì)象及 javaBean 之間做轉(zhuǎn)換,不過(guò)為了避免混淆我們還是使用 JSON。

    @Test  public void whenGenerateJson_thanGenerationCorrect() throws ParseException {      JSONArray jsonArray = new JSONArray();      for (int i = 0; i < 2; i++) {          JSONObject jsonObject = new JSONObject();          jsonObject.put("AGE", 10);          jsonObject.put("FULL NAME", "Doe " + i);          jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12");          jsonArray.add(jsonObject);      }      String jsonOutput = jsonArray.toJSONString();  }

    輸出結(jié)果為:

    [     {        "AGE":"10",        "DATE OF BIRTH":"2016/12/12 12:12:12",        "FULL NAME":"Doe 0"     },     {        "AGE":"10",        "DATE OF BIRTH":"2016/12/12 12:12:12",        "FULL NAME":"Doe 1"     }  ]

    JSON 字符串轉(zhuǎn)換為 Java 對(duì)象

    現(xiàn)在我們已經(jīng)學(xué)會(huì)了如何創(chuàng)建 JSON 對(duì)象,以及如何將 Java 對(duì)象轉(zhuǎn)換為 JSON 字符串,接下來(lái)我們就需要了解如何解析 JSON:

    @Test  public void whenJson_thanConvertToObjectCorrect() {      Person person = new Person(20, "John", "Doe", new Date());      String jsonObject = JSON.toJSONString(person);      Person newPerson = JSON.parseObject(jsonObject, Person.class);             assertEquals(newPerson.getAge(), 0); // 如果我們?cè)O(shè)置系列化為 false      assertEquals(newPerson.getFullName(), listOfPersons.get(0).getFullName());  }

    我們可以使用 JSON.parseObject() 將 JSON 字符串轉(zhuǎn)換為 Java 對(duì)象。

    注意反序列化時(shí)為對(duì)象時(shí),必須要有默認(rèn)無(wú)參的構(gòu)造函數(shù),否則會(huì)報(bào)異常:

    com.alibaba.fastjson.JSONException: default constructor not found.

    以下是簡(jiǎn)單的實(shí)例測(cè)試:

    Person [age=20, fullName=John Doe, dateOfBirth=Wed Jul 20 08:51:12 WEST 2016]

    @JSONField deserialize 可選項(xiàng)可以指定字段不反序列化。

    @JSONField(name = "DATE OF BIRTH", deserialize=false)  private Date dateOfBirth;

    輸出結(jié)果為:

    Person [age=20, fullName=John Doe, dateOfBirth=null]

    使用 ContextValueFilter 配置 JSON 轉(zhuǎn)換

    在某些場(chǎng)景下,對(duì)Value做過(guò)濾,需要獲得所屬JavaBean的信息,包括類型、字段、方法等。在fastjson-1.2.9中,提供了ContextValueFilter,類似于之前版本提供的ValueFilter,只是多了BeanContext參數(shù)可用。

    @Test  public void givenContextFilter_whenJavaObject_thanJsonCorrect() {      ContextValueFilter valueFilter = new ContextValueFilter () {          public Object process(            BeanContext context, Object object, String name, Object value) {              if (name.equals("DATE OF BIRTH")) {                  return "NOT TO DISCLOSE";              }              if (value.equals("John")) {                  return ((String) value).toUpperCase();              } else {                  return null;              }          }      };      String jsonOutput = JSON.toJSONString(listOfPersons, valueFilter);  }

    以上實(shí)例中我們隱藏了 DATE OF BIRTH 字段,并過(guò)濾名字不包含 John 的字段:

    [      {          "FULL NAME":"JOHN DOE",          "DATE OF BIRTH":"NOT TO DISCLOSE"      }  ]

    使用 NameFilter 和 SerializeConfig

    NameFilter: 序列化時(shí)修改 Key。

    SerializeConfig:內(nèi)部是個(gè)map容器主要功能是配置并記錄每種Java類型對(duì)應(yīng)的序列化類。

    @Test  public void givenSerializeConfig_whenJavaObject_thanJsonCorrect() {      NameFilter formatName = new NameFilter() {          public String process(Object object, String name, Object value) {              return name.toLowerCase().replace(" ", "_");          }      };             SerializeConfig.getGlobalInstance().addFilter(Person.class,  formatName);      String jsonOutput =         JSON.toJSONStringWithDateFormat(listOfPersons, "yyyy-MM-dd");  }

    實(shí)例中我們聲明了 formatName 過(guò)濾器使用 NameFilter 匿名類來(lái)處理字段名稱。 新創(chuàng)建的過(guò)濾器與 Person 類相關(guān)聯(lián),然后添加到全局實(shí)例,它是 SerializeConfig 類中的靜態(tài)屬性。

    現(xiàn)在我們可以輕松地將對(duì)象轉(zhuǎn)換為JSON格式。

    注意我們使用的是 toJSONStringWithDateFormat() 而不是 toJSONString() ,它可以更快速的格式化日期。

    輸出結(jié)果:

    [        {            "full_name":"John Doe",          "date_of_birth":"2016-07-21"      },      {            "full_name":"Janette Doe",          "date_of_birth":"2016-07-21"      }  ]
    贊(1)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)