java筑基期(10)----ajaxjson(2)
JSON:
? ? 1. 概念: JavaScript Object Notation?? ??? ?JavaScript對象表示法
 ?? ?Person p = new Person();
 ?? ?p.setName("張三");
 ?? ?p.setAge(23);
 ?? ?p.setGender("男");
?? ?var p = {"name":"張三","age":23,"gender":"男"};
?? ?* json現在多用于存儲和交換文本信息的語法
 ?? ?* 進行數據的傳輸
 ?? ?* JSON 比 XML 更小、更快,更易解析。
 ? ?
 2. 語法:
 ?? ?1. 基本規則
 ?? ?* 數據在名稱/值對中:json數據是由鍵值對構成的
 ?? ??? ?* 鍵用引號(單雙都行)引起來,也可以不使用引號
 ?? ??? ?* 值得取值類型:
 ?? ??? ??? ?1. 數字(整數或浮點數)
 ?? ??? ??? ?2. 字符串(在雙引號中)
 ?? ??? ??? ?3. 邏輯值(true 或 false)
 ?? ??? ??? ?4. 數組(在方括號中)?? ?{"persons":[{},{}]}
 ?? ??? ??? ?5. 對象(在花括號中) {"address":{"province":"陜西"....}}
 ?? ??? ??? ?6. null
 ?? ?* 數據由逗號分隔:多個鍵值對由逗號分隔
 ?? ?* 花括號保存對象:使用{}定義json 格式
 ?? ?* 方括號保存數組:[]
 ?? ?2. 獲取數據:
 ?? ??? ?1. json對象.鍵名
 ?? ??? ?2. json對象["鍵名"]
 ?? ??? ?3. 數組對象[索引]
 ?? ??? ?4. 遍歷
3. JSON數據和Java對象的相互轉換
* JSON解析器:
 ?? ?* 常見的解析器:Jsonlib,Gson,fastjson,jackson
1. JSON轉為Java對象
 ?? ?1. 導入jackson的相關jar包
 ?? ?2. 創建Jackson核心對象 ObjectMapper
 ?? ?3. 調用ObjectMapper的相關方法進行轉換
 ?? ??? ?1. readValue(json字符串數據,Class)
 2. Java對象轉換JSON
 ?? ?1. 使用步驟:
 ?? ??? ?1. 導入jackson的相關jar包
 ?? ??? ?2. 創建Jackson核心對象 ObjectMapper
 ?? ??? ?3. 調用ObjectMapper的相關方法進行轉換
 ?? ??? ??? ?1. 轉換方法:
 ?? ??? ??? ??? ?* writeValue(參數1,obj):
 ?? ??? ??? ??? ??? ?參數1:
 ?? ??? ??? ??? ??? ??? ?File:將obj對象轉換為JSON字符串,并保存到指定的文件中
 ?? ??? ??? ??? ??? ??? ?Writer:將obj對象轉換為JSON字符串,并將json數據填充到字符輸出流中
 ?? ??? ??? ??? ??? ??? ?OutputStream:將obj對象轉換為JSON字符串,并將json數據填充到字節輸出流中
 ?? ??? ??? ??? ?* writeValueAsString(obj):將對象轉為json字符串
?? ??? ??? ?2. 注解:
 ?? ??? ??? ??? ?1. @JsonIgnore:排除屬性。
 ?? ??? ??? ??? ?2. @JsonFormat:屬性值得格式化
 ?? ??? ??? ??? ??? ?* @JsonFormat(pattern = "yyyy-MM-dd")
?? ??? ??? ?3. 復雜java對象轉換
 ?? ??? ??? ??? ?1. List:數組
 ?? ??? ??? ??? ?2. Map:對象格式一致
?案例:
* 校驗用戶名是否存在
 ?? ?1. 服務器響應的數據,在客戶端使用時,要想當做json數據格式使用。有兩種解決方案:
 ?? ??? ?1. $.get(type):將最后一個參數type指定為"json"
 ?? ??? ?2. 在服務器端設置MIME類型
 ?? ??? ??? ?response.setContentType("application/json;charset=utf-8");
FinfUserServlet
import com.fasterxml.jackson.databind.ObjectMapper;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.Map;@WebServlet("/findUserServlet") public class FindUserServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.獲取用戶名String username = request.getParameter("username");//2.調用service層判斷用戶名是否存在//期望服務器響應回的數據格式:{"userExsit":true,"msg":"此用戶名太受歡迎,請更換一個"}// {"userExsit":false,"msg":"用戶名可用"}//設置響應的數據格式為jsonresponse.setContentType("application/json;charset=utf-8");Map<String,Object> map = new HashMap<String,Object>();if("tom".equals(username)){//存在map.put("userExsit",true);map.put("msg","此用戶名太受歡迎,請更換一個");}else{//不存在map.put("userExsit",false);map.put("msg","用戶名可用");}//將map轉為json,并且傳遞給客戶端//將map轉為jsonObjectMapper mapper = new ObjectMapper();//并且傳遞給客戶端mapper.writeValue(response.getWriter(),map);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);} }register.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>注冊頁面</title><script src="js/jquery-3.3.1.min.js"></script><script>//在頁面加載完成后$(function () {//給username綁定blur事件$("#username").blur(function () {//獲取username文本輸入框的值var username = $(this).val();//發送ajax請求//期望服務器響應回的數據格式:{"userExsit":true,"msg":"此用戶名太受歡迎,請更換一個"}// {"userExsit":false,"msg":"用戶名可用"}$.get("findUserServlet",{username:username},function (data) {//判斷userExsit鍵的值是否是true// alert(data);var span = $("#s_username");if(data.userExsit){//用戶名存在span.css("color","red");span.html(data.msg);}else{//用戶名不存在span.css("color","green");span.html(data.msg);}}/*,"json"*/);}); });</script> </head> <body><form><input type="text" id="username" name="username" placeholder="請輸入用戶名"><span id="s_username"></span><br><input type="password" name="password" placeholder="請輸入密碼"><br><input type="submit" value="注冊"><br></form></body> </html>?
總結
以上是生活随笔為你收集整理的java筑基期(10)----ajaxjson(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: java筑基期(9)----ajaxjs
- 下一篇: java结丹期(11)----javaw
