天天看點

阿裡Fastjson使用阿裡Fastjson

阿裡Fastjson

文章目錄

  • 阿裡Fastjson
    • 1 JSON簡介
    • 2 阿裡fastjson使用
      • 2.1 在maven項目中導入相關依賴
      • 2.2 建立JSONObject對象添加資料
      • 2.3 JSON格式的字元串與JSONObject對象互相轉換
      • 2.4 根據鍵擷取值
      • 2.4 周遊JSONArray數組
    • 3 封裝傳回值工具類

1 JSON簡介

  JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。易于人閱讀和編寫。同時也易于機器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。百度百科

json資料一般格式:

{
	"key1":value1,
	"key2":value2,
	"key3":value3,
	...
}
           

json嵌套格式:

{
	"key1":{
			"key11":value,
			"keyi12":value,
			...
			},
	"key2":{
			"key21":value,
			"key22":{
					"key221":value
					},
			...			
			},
	...
}
           

json數組格式:

{
	"key1":[1,2,3],
	"key2":[{"name":"劉備"},{"name":"關羽"},{"name":"張飛"}]
}
           

2 阿裡fastjson使用

2.1 在maven項目中導入相關依賴

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

2.2 建立JSONObject對象添加資料

構造方法:

  • public JSONObject()

  • public JSONObject(Map<String, Object> map)

成員方法:

  • public Object put(String key, Object value)

  • public void putAll(Map<? extends String, ? extends Object> m)

執行個體:

Map<String, Object> map = new HashMap<>();
map.put("profession", "學生");
map.put("qq", "76**55");

JSONObject json1 = new JSONObject();
json1.put("name", "Jacks");
json1.put("age", 22);
json1.putAll(map);
System.out.println("json1:" + json1);

JSONObject json2 = new JSONObject(map);
json2.put("name", "Jacks");
json2.put("age", 22);
System.out.println("json2:" + json2);
           

運作結果:

json1:{"profession":"學生","qq":"76**55","name":"Jacks","age":22}
json2:{"profession":"學生","qq":"76**55","name":"Jacks","age":22}
           

注意:

  • Map

    的結構和

    JSON

    結構相似,都是以

    K-V

    的方式存儲,是以可以直接将

    Map

    作為參數構造

    JSON

    對象,

    Map

    key

    value

    會分别轉換成

    JSON

    key

    value

  • Map

    集合和

    JSON

    對象的鍵都是唯一的,若重複添加同一個鍵的值,前面的值會被後面的值覆寫。

2.3 JSON格式的字元串與JSONObject對象互相轉換

成員方法:

  • String

    JSONObject對象

    public static JSONObject parseObject(String text)

  • JSONObject

    對象轉

    String

    public static String toJSONString(Object object, SerializerFeature... features)

  • SerializerFeature

    是一個枚舉,具體詳情可以參照這篇部落格fastjson中SerializerFeature的用法及中文注解

執行個體:

String json = "{\"name\":\"Jacks\",\"age\":22}";

//字元串轉json對象
JSONObject jsonObject = JSON.parseObject(json);
//json對象轉字元串
String jsonString = JSON.toJSONString(jsonObject);

System.out.println("字元串json:" + json);
System.out.println("JSONObject對象jsonObject:" + jsonObject);
System.out.println("JSONString:" + jsonString);
           

運作結果:

字元串json:{"name":"Jacks","age":22}
JSONObject對象jsonObject:{"name":"Jacks","age":22}
JSONString:{"name":"Jacks","age":22}
           

注意:這裡的列印結果都是一樣的,說明轉換成功。如果字元串不是JSON格式的話,則會抛出異常:

com.alibaba.fastjson.JSONException: error parse new

2.4 根據鍵擷取值

成員方法:

  • 根據鍵擷取

    Object

    類型的值:

    public Object get(Object key)

  • 根據鍵擷取

    JSONObject

    類型的值:

    public JSONObject getJSONObject(String key)

  • 根據鍵擷取

    String

    類型的值:

    public String getString(String key)

  • 根據鍵擷取

    Integer

    類型的值:

    public Integer getInteger(String key)

執行個體:

String json = "{\"name\":\"Jacks\",\"age\":22}";
JSONObject jsonObject = JSON.parseObject(json);
String name = jsonObject.getString("name");
int age = jsonObject.getInteger("age");
System.out.println("姓名:" + name);
System.out.println("年齡:" + age);
           

運作結果:

姓名:Jacks
年齡:22
           

2.4 周遊JSONArray數組

使用for循環,執行個體如下:

String jsonString = "[\n" +
                "    {\"name\":\"劉備\"},\n" +
                "    {\"name\":\"關羽\"},\n" +
                "    {\"name\":\"張飛\"},\n" +
                "    {\"name\":\"趙雲\"},\n" +
                "    {\"name\":\"馬超\"}\n" +
                "    {\"name\":\"黃忠\"}\n" +
                "    {\"name\":\"諸葛亮\"}\n" +
                "]";

JSONArray json = JSONArray.parseArray(jsonString);
System.out.println("JSON數組:" + json);
for (int i = 0; i < json.size(); i++) {
    JSONObject data = json.getJSONObject(i);
    String name = data.getString("name");
    System.out.println("姓名:" + name);
}
           

運作結果:

JSON數組:[{"name":"劉備"},{"name":"關羽"},{"name":"張飛"},{"name":"趙雲"},{"name":"馬超"},{"name":"黃忠"},{"name":"諸葛亮"}]
姓名:劉備
姓名:關羽
姓名:張飛
姓名:趙雲
姓名:馬超
姓名:黃忠
姓名:諸葛亮
           

3 封裝傳回值工具類

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;

public class ResultJSON {
	//僅傳回狀态碼和回報資訊,用于請求出錯的響應。
    public static String resultStatus(int code,String msg){
        JSONObject json = new JSONObject();
        json.put("code",code);
        json.put("msg",msg);
        return JSON.toJSONString(json, SerializerFeature.WriteMapNullValue, SerializerFeature.DisableCircularReferenceDetect);
    }
	//傳回狀态碼、回報資訊和資料,用于請求成功的響應。
    public static String resultData(int status,String msg,Object data){
        JSONObject json = new JSONObject();
        json.put("status",status);
        json.put("msg",msg);
        json.put("data",data);
        return JSON.toJSONString(json, SerializerFeature.WriteMapNullValue, SerializerFeature.DisableCircularReferenceDetect);
    }
}
           

說明:以上内容是部落客目前應用到的一些方法,并不全面,僅此記錄學習過程。