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資料就是一段字元串而已,隻不過有不同意義的分隔符将其分割開來。
格式:
-
一個大括号,表示一個對象。括号中描述對象的屬性。通過鍵值對來描述對象的屬性。{}
-
一個中括号,表示數組。數組中可以存放對象,也可以存放值。[]
-
冒号,鍵與值使用冒号連接配接。:
-
逗号,多個鍵值對使用逗号分隔。,
-
引号,鍵值對的鍵,應使用引号引起(通常Java解析時,鍵不使用引号會報錯。而JS能正确解析)。""
- 鍵值對的值,可以是對象、數組、字元串(字元串用
引号引住)或數字(數字不需要用引号)。""
三、Java與JSON
在Java中需要做什麼?
- 将 Java 中的對象,快速的轉換為 JSON 格式的字元串。
- 将 JSON 格式的字元串,轉換為 Java 對象。
四、使用Gson解析JSON資料
Gson是谷歌官方推出的支援
JSON -- Java Object
互相轉換的
Java序列化/反序列化
庫。在使用之前需要在項目中導入Gson的jar包。我使用的是 gson-2.8.6.jar。下載下傳位址
點選這裡即可下載下傳

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);
}
}
運作結果:
先建立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字元串轉換為對象,同樣也是沒有任何的問題,可以拿到。
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
集合。
五、使用FastJson解析JSON資料
FastJson是由阿裡巴巴工程師基于Java開發的一款JSON解析器和生成器,可用于将Java對象
轉換為其JSON表示形式。它還可以用于将JSON字元串轉換為等效的Java對象。Fastjson可以
處理任意Java對象,包括沒有源代碼的預先存在的對象。
使用前需要在項目中導入FastJson的jar包,我使用的是的 fastjson-1.2.75.jar。下載下傳位址。如果此連結失效,請去GitHub官網下載下傳。
使用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);
轉換為對象。
六、總結
使用Gson解析
- 使用Gson解析,先導入jar包
gson-2.8.6.jar
- 建立Gson對象,
Gson gson = new Gson();
- 對象轉換為 json 字元串,
String json = gson.toJson(對象);
- json 字元串轉換為對象,
Object obj = gson.fromJson("json字元串", Object.class);
使用FastJson解析
- 使用FastJson解析,先導入jar包
fastjson-1.2.75.jar
- 對象轉換為 json字元串,
String json = JSON.toJSONString(對象);
- json 字元串轉換為對象,
Object obj = JSON.parseObject("json字元串", Object.class);
- json 字元串轉換
,list
List<Object> list = JSON.parseArray("json字元串", Object.class);
如果在團隊中需要你去選型,為了更好的融入團隊,在國内建議使用FastJson,如果FastJson有安全隐患,則使用Gson。