天天看點

Java 解析JSON的兩種方式 Gson和FastJson一、JSON簡介二、JSON資料格式三、Java與JSON四、使用Gson解析JSON資料五、使用FastJson解析JSON資料六、總結

JSON是一個輕量級的資料格式,輕量級是相比較XML等其他複雜的存儲格式而言,各個平台語言都支援JSON互動、JSON解析和存儲。JSON常用于我們接口互動,前後端互動中,有解析速度快,友善的特點。是以學會JSON解析是非常重要的。

目錄

  • 一、JSON簡介
  • 二、JSON資料格式
  • 三、Java與JSON
  • 四、使用Gson解析JSON資料
    • 1. 對象轉換為JSON字元串
    • 2. JSON字元串轉換為對象
    • 3. JSON字元串轉換為HashMap
  • 五、使用FastJson解析JSON資料
  • 六、總結

一、JSON簡介

簡介:

JSON: JavaScript Object Notation ,JS對象簡譜,是一種輕量級的資料交換格式。

JSON資料現在是我們開發中用的最多的,百分之九十的資料都是通過JSON方式進行傳輸,那麼想要學好JSON解析就要了解什麼是JSON資料,怎麼快速解析它進而提升開發效率。

二、JSON資料格式

什麼是JSON資料?

{
    "code": "10000",
    "charge": false,
    "msg": "查詢成功",
    "result": {
        "showapi_res_code": 0,
        "showapi_res_error": "",
        "showapi_res_body": {
            "allNum": 7892,
            "allPages": 395,
            "contentlist": [
                {
                    "ct": "2016-05-30 16:30:27.242",
                    "id": "574bfa236e36c1d5f9289678",
                    "img": "http://www.zbjuran.com/uploads/allimg/160530/2-160530145631924.gif",
                    "title": "要不要來個鴛鴦戲水呢",
                    "type": 3
                },
                {
                    "ct": "2016-05-30 16:30:27.239",
                    "id": "574bfa236e36c1d5f9289677",
                    "img": "http://www.zbjuran.com/uploads/allimg/160530/2-160530151R09B.gif",
                    "title": "翻滾的美少女",
                    "type": 3
                }
            ],
            "currentPage": 1,
            "maxResult": 20,
            "ret_code": 0
        }
    }
}
           

JSON資料就是一段字元串而已,隻不過有不同意義的分隔符将其分割開來。

格式:

  1. {}

    一個大括号,表示一個對象。括号中描述對象的屬性。通過鍵值對來描述對象的屬性。
  2. []

    一個中括号,表示數組。數組中可以存放對象,也可以存放值。
  3. :

    冒号,鍵與值使用冒号連接配接。
  4. ,

    逗号,多個鍵值對使用逗号分隔。
  5. ""

    引号,鍵值對的鍵,應使用引号引起(通常Java解析時,鍵不使用引号會報錯。而JS能正确解析)。
  6. 鍵值對的值,可以是對象、數組、字元串(字元串用

    ""

    引号引住)或數字(數字不需要用引号)。

三、Java與JSON

在Java中需要做什麼?

  • 将 Java 中的對象,快速的轉換為 JSON 格式的字元串。
  • 将 JSON 格式的字元串,轉換為 Java 對象。

四、使用Gson解析JSON資料

Gson是谷歌官方推出的支援

JSON -- Java Object

互相轉換的

Java序列化/反序列化

庫。在使用之前需要在項目中導入Gson的jar包。我使用的是 gson-2.8.6.jar。下載下傳位址

點選這裡即可下載下傳

Java 解析JSON的兩種方式 Gson和FastJson一、JSON簡介二、JSON資料格式三、Java與JSON四、使用Gson解析JSON資料五、使用FastJson解析JSON資料六、總結

1. 對象轉換為JSON字元串

先建立一個

Book

類,類中有

id

name

info

屬性。

public class Book {
    private String id;
    private String name;
    private String info;

    public Book() {
    }

    public Book(String id, String name, String info) {
        this.id = id;
        this.name = name;
        this.info = info;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", info='" + info + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        com.java.json.Book book = (com.java.json.Book) o;
        return Objects.equals(id, book.id) && Objects.equals(name, book.name) && Objects.equals(info, book.info);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, info);
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}
           

下面開始使用,我們先來将對象轉換為JSON字元串。

import com.google.gson.Gson;

/**
 * @Author: 網友小鋒
 * @Description: 使用 Gson 解析 json(谷歌)
 * @Date Created in 2021-01-15 17:45
 * @Modified By:
 */
public class DemoGson1 {
    public static void main(String[] args) {
        // 1.   建立Gson對象
        Gson gson = new Gson();
        // 2.   建立一個對象
        Book b = new Book("1001", "金桃子", "種植桃子真辛苦");
        // 對象轉換為 json 字元串
        String json = gson.toJson(b);
        System.out.println(json);
    }
}
           

運作結果:

Java 解析JSON的兩種方式 Gson和FastJson一、JSON簡介二、JSON資料格式三、Java與JSON四、使用Gson解析JSON資料五、使用FastJson解析JSON資料六、總結

先建立Gson對象

Gson gson = new Gson();

,使用

String json = gson.toJson(對象);

對象已被正确的轉換為json字元串了,非常簡單。

2. JSON字元串轉換為對象

這個操作也非常簡單。

import com.google.gson.Gson;

/**
 * @Author: 網友小鋒
 * @Description: 使用 Gson 解析 json(谷歌)
 * @Date Created in 2021-01-15 17:45
 * @Modified By:
 */
public class DemoGson2 {
    public static void main(String[] args) {
        // 1.   建立Gson對象
        Gson gson = new Gson();
        // json 字元串轉換為對象 {"id":"1001","name":"金桃子","info":"種植桃子真辛苦"}
        Book book = gson.fromJson("{\"id\":\"1001\",\"name\":\"金桃子\",\"info\":\"種植桃子真辛苦\"}", Book.class);
        System.out.println(book.getId());
        System.out.println(book.getName());
    }
}
           

使用

Object obj = gson.fromJson("json字元串", Object.class);

json字元串轉換為對象,同樣也是沒有任何的問題,可以拿到。

Java 解析JSON的兩種方式 Gson和FastJson一、JSON簡介二、JSON資料格式三、Java與JSON四、使用Gson解析JSON資料五、使用FastJson解析JSON資料六、總結

3. JSON字元串轉換為HashMap

我們來解析一下稍微複雜一點的json字元串,在一個屬性中加入數組。

下面看解析代碼

import com.google.gson.Gson;

import java.util.HashMap;
import java.util.List;

/**
 * @Author: 網友小鋒
 * @Description: 使用 Gson 解析 json(谷歌)
 * @Date Created in 2021-01-15 17:45
 * @Modified By:
 */
public class DemoGson3 {
    public static void main(String[] args) {
        // 1.   建立Gson對象
        Gson g = new Gson();
        // 2.   json 字元串轉換為 HashMap {"id":"1001","name":"金桃子","info":"種植桃子真辛苦","page":["鋤禾日當午","汗滴禾下土","床前明月光"]}
        HashMap data = g.fromJson("{\"id\":\"100\",\"name\":\"金蘋果\",\"info\":\"種植蘋果的真辛苦\",\"page\":[\"鋤禾日當午\",\"汗滴禾下土\",\"床前明月光\"]}", HashMap.class);
        // name鍵值對是字元串
        System.out.println(data.get("name").getClass());
        // page鍵值對是 ArrayList集合
        System.out.println(data.get("page").getClass());
        // 擷取name屬性的值
        String name = (String) data.get("name");
        System.out.println(name);
        // 擷取page屬性的值
        List page= (List) data.get("page");
        System.out.println(page.get(1));
        System.out.println(page.get(2));
    }
}
           

在轉換為HashMap後,

id

name

info

屬性解析變成了

String

字元串,而

page

屬性是一個數組,解析後變成了

ArrayList

集合。

Java 解析JSON的兩種方式 Gson和FastJson一、JSON簡介二、JSON資料格式三、Java與JSON四、使用Gson解析JSON資料五、使用FastJson解析JSON資料六、總結

五、使用FastJson解析JSON資料

FastJson是由阿裡巴巴工程師基于Java開發的一款JSON解析器和生成器,可用于将Java對象

轉換為其JSON表示形式。它還可以用于将JSON字元串轉換為等效的Java對象。Fastjson可以

處理任意Java對象,包括沒有源代碼的預先存在的對象。

使用前需要在項目中導入FastJson的jar包,我使用的是的 fastjson-1.2.75.jar。下載下傳位址。如果此連結失效,請去GitHub官網下載下傳。

Java 解析JSON的兩種方式 Gson和FastJson一、JSON簡介二、JSON資料格式三、Java與JSON四、使用Gson解析JSON資料五、使用FastJson解析JSON資料六、總結

使用FastJson解析json比Gson更為簡單。下面直接來看代碼:

import com.alibaba.fastjson.JSON;

import java.util.HashMap;
import java.util.List;

/**
 * @Author: 網友小鋒
 * @Description: 使用 FastJson 解析 json (阿裡)
 * @Date Created in 2021-01-15 18:07
 * @Modified By:
 */
public class DemoFastJson {
    public static void main(String[] args) {
        Book book = new Book("1002","唐詩三百首","凝視地上霜");
        // 1.   對象 轉換為 json字元串
        String json = JSON.toJSONString(book);
        System.out.println(json);

        // 2.   json字元串 轉換為 對象
        Book b = JSON.parseObject(json, Book.class);
        System.out.println(b.getName());

        // json 字元串轉換 list ["一二三","二三四","三四五"]
        List<String> list = JSON.parseArray("[\"一二三\",\"二三四\",\"三四五\"]", String.class);
        System.out.println(list.get(2));

        // json 字元串轉換為 HashMap {"id":"1001","name":"金桃子","info":"種植桃子真辛苦","page":["鋤禾日當午","汗滴禾下土","床前明月光"]}
        HashMap data = JSON.parseObject("{\"id\":\"1001\",\"name\":\"金桃子\",\"info\":\"種植桃子真辛苦\",\"page\":[\"鋤禾日當午\",\"汗滴禾下土\",\"床前明月光\"]}", HashMap.class);
        List page= (List) data.get("page");
        System.out.println(page.get(0));
    }
}
           

使用FastJson解析,不需要建立相應的對象,直接使用靜态方法

JSON.toJSONString(對象);

轉換為 json字元串,

JSON.parseObject(json字元串, 對象.class);

轉換為對象。

Java 解析JSON的兩種方式 Gson和FastJson一、JSON簡介二、JSON資料格式三、Java與JSON四、使用Gson解析JSON資料五、使用FastJson解析JSON資料六、總結

六、總結

使用Gson解析

  1. 使用Gson解析,先導入jar包

    gson-2.8.6.jar

  2. 建立Gson對象,

    Gson gson = new Gson();

  3. 對象轉換為 json 字元串,

    String json = gson.toJson(對象);

  4. json 字元串轉換為對象,

    Object obj = gson.fromJson("json字元串", Object.class);

使用FastJson解析

  1. 使用FastJson解析,先導入jar包

    fastjson-1.2.75.jar

  2. 對象轉換為 json字元串,

    String json = JSON.toJSONString(對象);

  3. json 字元串轉換為對象,

    Object obj = JSON.parseObject("json字元串", Object.class);

  4. json 字元串轉換

    list

    List<Object> list = JSON.parseArray("json字元串", Object.class);

如果在團隊中需要你去選型,為了更好的融入團隊,在國内建議使用FastJson,如果FastJson有安全隐患,則使用Gson。