大資料專案實戰之十二:12.JSON資料格式講解以及fastjson介紹
什麼是JSON?
就是一種資料格式;比如說,我們現在規定,有一個txt文字檔案,用來存放一個班級的成績;這個文字檔案裡的學生成績的格式,是第一行,就是一行列頭(姓名 班級 年級 科目 成績),接下來,每一行就是一個學生的成績。那麼,這個文字檔案內的這種資訊存放的格式,其實就是一種資料格式。
學生 班級 年級 科目 成績
張三 一班 大一 高數 90
李四 二班 大一 高數 80
對應到JSON,它其實也是代表了一種資料格式,所謂資料格式,就是資料組織的形式。比如說,剛才所說的學生成績,用JSON格式來表示的話,如下:
[{"學生":"張三", "班級":"一班", "年級":"大一", "科目":"高數", "成績":90}, {"學生":"李四", "班級":"二班", "年級":"大一", "科目":"高數", "成績":80}]
其實,JSON就是對同樣一批資料的,不同的一種資料表示的形式。
JSON的資料語法,其實很簡單:如果是包含多個數據實體的話,比如說多個學生成績,那麼需要使用陣列的表現形式,就是[]。對於單個數據實體,比如一個學生的成績,那麼使用一個{}來封裝資料,對於資料實體中的每個欄位以及對應的值,使用key:value的方式來表示,多個key-value對之間用逗號分隔;多個{}代表的資料實體之間,用逗號分隔。
擴充套件一下:
JSON在企業級專案開發過程中,扮演的角色是無比重要的。最常用的地方,莫過於基於Ajax的前端和後端程式之間的通訊。比如說,在前端頁面中,可以不重新整理頁面,直接傳送一個Ajax非同步請求到後端,後端返回一個JSON格式的資料,然後前端使用JSON格式的資料,渲染頁面中的對應地方的資訊。
在我們的專案中,JSON是起到了什麼作用呢?我們在task表中的task_param欄位,會存放不同型別的任務對應的引數。比如說,使用者訪問session分析模組與頁面單跳轉化率統計模組的任務引數是不同的,但是,使用同一張task表來儲存所有型別的任務。那麼,你怎麼來儲存不同型別的任務的不同的引數呢?你的表的欄位是事先要定好的呀。
所以,我們採取了,用一個task_param欄位,來儲存不同型別的任務的引數的方式。task_param欄位中,實際上會儲存一個任務所有的欄位,使用JSON的格式封裝所有任務引數,並存儲在task_param欄位中。就實現了非常靈活的方式。
如何來操作JSON格式的資料?
比如說,要獲取JSON中某個欄位的值。這裡使用的是阿里的fastjson工具包。使用這個工具包,可以方便的將字串型別的JSON資料,轉換為一個JSONObject物件,然後通過其中的getX()方法,獲取指定的欄位的值。
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class FastJsonTest {
public static void main(String[] args) {
String json = "[{'學生':'張三', '班級':'一班', '年級':'大一', '科目':'高數', '成績':90}, {'學生':'李四', '班級':'二班', '年級':'大一', '科目':'高數', '成績':80}]";
JSONArray jsonArray = JSONArray.parseArray(json);
JSONObject jsonObject = jsonArray.getJSONObject(0);
System.out.println("jsonObject = " + jsonObject.getString("學生"));
}
}