JSON(JavaScript對象表示法)


JSON

一、概念

JavaScript Object Notation,意為JavaScript對象表示法,是一種存儲和交換信息的數據格式,比xml更小、更快、更易於解析

二、語法

1. 基本規則

  1. 數據在鍵值對中,數據由鍵值對表示
    1. :鍵可以用引號也可以不用引號
    2. 值:取值可以為:
      • 數字(整數、浮點數),直接寫
      • 字符串(在引號中)
      • 邏輯值(true or false)
      • 數組(在方括號中)
      • 對象(json對象,在花括號中)
      • null
  2. 數據由逗號分隔
  3. 花括號保存對象
  4. 方括號保存數組

2. 獲取數據

  1. json對象.鍵名

  2. json對象[”鍵名“]:注意有引號

  3. 數組對象[索引]

    for(key in person) {
        alert(key + " : " + person[key]);
    }
    

三、JSON和java對象的轉換

JSON解析器:Jsonlib(官方)、Gson(Google)、fastjson(Alibaba)、Jackson

1. java對象轉為JSON

  1. 導入Jackson的相關jar包

  2. 創建Jackson核心對象ObjectMapper

    1. writeValue(參數, obj):參數的取值

      1. File:將obj對象轉換為json字符串,並保存到指定的文件

      2. Writer:將obj對象轉換為json字符串,並填充到指定的字符輸出流

      3. OutputStream:將obj對象轉換為json字符串,並填充到指定的字節輸出流

    2. writeValueAsString(obj):將java對象轉為json字符串

  3. 調用ObjectMapper的相關方法進行轉換

    Person person = new Person("David", 18, "男");
    
    ObjectMapper mapper = new ObjectMapper();
    
    String json_person = mapper.writeValueAsString(person);
    mapper.writeValue(new File("d://a.txt"), person);
    
  4. 注解:當java對象有的成員變量是Date類型的時候,如果直接轉為JSON得到的值是毫秒值,可以使用注解解決這個問題:在定義的類的成員變量上添加這兩個注解:

    1. @JsonIgnore:表示在轉為JSON時不考慮這個鍵值對

    2. @JsonFormat:表示在轉為JSON時可以轉為指定的格式

      @JsonFormat(pattern = "yyyy-mm-dd")

  5. 復雜的java對象:

    1. List:轉為一個數組:[]
    2. Map:轉為一個JSON對象:{}

2. JSON轉為java對象

  1. 創建Jackson核心對象ObjectMapper

  2. ObjectMapper對象調用readValue方法:readValue(json字符串數據,Class)

    String json = "{\"name\":\"david\",\"age\":18,\"gender\":\"男\"}";// 鍵值對要用雙引號、單引號報錯
    ObjectMapper mapper = new ObjectMapper();
    
    Person person = mapper.readValue(json, Person.class);
    

四、Demo:用戶名是否存在的校驗

實現邏輯:

  1. 當輸入用戶名的文本框失去焦點(blur事件),向服務器發送異步請求
  2. 服務器端接收請求,查詢數據庫,將結果填充進字符輸入流

客戶端:

$("#username").blur(function () {
    var username = $(this).val();
    $.get("findUsernameServlet", {username:username}, function (data) {// data 是服務端響應的數據
        var span = $("#span_username");
        
        if (data.userExist) {
            span.css("color", "red");
            span.html(data.msg);
        } else {
            span.css("color", "green");
            span.html(data.msg);
        }
    }, "json");// 格式為json
});

服務端:

response.setContentType("text/html;charset=utf-8");

String username = request.getParameter("username");

Map<String, Object> map = new HashMap<String, Object>();

if ("cat".equals(username)) {
    // 用戶名已經存在,應該去查找數據庫判斷
    map.put("userExist", true);
    map.put("msg", "用戶名已經存在");
} else {
    // 用戶名沒有存在
    map.put("userExist", false);
    map.put("msg", "用戶名可用");
}

ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(response.getWriter(), map);

注意:需要把服務器寫會的數據當做JSON處理,兩種方法:

  1. 在get/post請求里指定數據格式 “json”
  2. 在服務端指定編碼、格式 response.setContentType("application/json;charset=utf-8");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM