1. 程式人生 > 其它 >JSON的轉換,在Java和JavaScript中

JSON的轉換,在Java和JavaScript中

JSON

參考自菜鳥教程:Java 中 JSON 的使用 | 菜鳥教程 (runoob.com)

JSON 簡介

JSON(JavaScript Object Notation, JS 物件簡譜) 是一種輕量級的資料交換格式。它基於 ECMAScript (歐洲計算機協會制定的js規範)的一個子集,採用完全獨立於程式語言的文字格式來儲存和表示資料。簡潔和清晰的層次結構使得 JSON 成為理想的資料交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。

在javaScrip 一切皆為物件,任何js支援的型別,都可以用JSON來表示

JSON 格式

  • 都以鍵值對的形式表示, 即 key: value

  • 物件都用 {} 形式為: {"屬性1":屬性1的值,"屬性2":屬性2的值,"屬性3":屬性3的值}

  • 陣列(即使包含了多個物件)都用 [] , 形式為:

[{"物件1的屬性1":物件1的屬性1的值,"物件1的屬性2":物件1的屬性2的值},{"物件2的屬性1":物件2的屬性1的值,"物件2的屬性2":物件2的屬性2的值}]

JSON 轉換

在JavaScript中:

// 假如定義了一個物件 let user = { name:'mm', sex : '女' ,age : 19 }; 
/* JSON轉換成字串 */
JSON.stringify(user); //返回一個字串,內容為:  {"name":"mm" ,"age":"20","sex":"女"}


/* 字串轉換成JSON */
let user_text = '{"name":"mm" ,"age":"20","sex":"女"}';
JSON.parse(user2_text); //返回一個物件

在Java中:

Java中並沒有內建JSON的解析,因此使用JSON需要藉助第三方類庫。

下面是幾個常用的 JSON 解析類庫:

  • Gson: 谷歌開發的 JSON 庫,功能十分全面。
  • FastJson: 阿里巴巴開發的 JSON 庫,效能十分優秀。
  • Jackson: 社群十分活躍且更新速度很快。

注:本文以阿里的 FastJson為例說明

依賴匯入

<!--FastJson的Maven依賴-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>

流程說明:

java變數 <--> JSON物件 <--> 字串

將java變數轉換為JSON

public void testJson() {
    JSONObject object = new JSONObject();
    //string
    object.put("string","string");
    //int
    object.put("int",2);
    //boolean
    object.put("boolean",true);
    //array
    List<Integer> integers = Arrays.asList(1,2,3);
    object.put("list",integers);
    //null
    object.put("null",null);
    System.out.println(object);
//列印結果:   {"boolean":true,"string":"string","list":[1,2,3],"int":2}    
}

將JSON轉換為java變數

public void testJson2() {
    
  JSONObject object = JSONObject
      .parseObject("{\"boolean\":true,\"string\":\"string\",\"list\":[1,2,3],\"int\":2}");
  //string
  String s = object.getString("string");
  System.out.println(s);
  //int
  int i = object.getIntValue("int");
  System.out.println(i);
  //boolean
  boolean b = object.getBooleanValue("boolean");
  System.out.println(b);
  //list
  List<Integer> integers = JSON.parseArray(object.getJSONArray("list").toJSONString(),Integer.class);
  integers.forEach(System.out::println);
  //null
  System.out.println(object.getString("null"));
}
/*  列印結果:
string
2
true
1
2
3
null
*/

方法使用

方法 作用
JSON.parseObject(String) 將字串解析為 JSON 物件
JSON.parseArray(String) 將從字串解析為 JSON 陣列
JSON.toJSONString(obj/array) 將 JSON 物件或 JSON 陣列轉化為字串

例項:

//將字串解析為JSON物件
JSONObject obj = JSON.parseObject("{\"runoob\":\"菜鳥教程\"}");
//從字串解析為JSON陣列
JSONArray arr = JSON.parseArray("[\"菜鳥教程\",\"RUNOOB\"]\n");
//將JSON物件轉化為字串
String objStr = JSON.toJSONString(obj);
//將JSON陣列轉化為字串
String arrStr = JSON.toJSONString(arr);