一、概述

  1、概念

    JSON:JavaScript Object Notation  JavaScript对象表示法

  2、基本格式

var p = {"name":"张三","age":23,"sex":"男"};

  3、用途和优点

    (1)json 现在多用于存储和交换文本信息的语法

    (2)进行数据的传输

    (3)JSON 比 XML 更小、更快,更易解析

二、语法

  1、基本规则

    (1)数据在名称/值对中:json 数据是由键值对构成的。

       ① 键用引号(单双都行)引起来,也可以不使用引号

       ② 值的类型:

         a、数字(整数或浮点数)

         b、字符串(在双引号中)

         c、逻辑值(true 或 false)

         d、数组(在方括号中) 如:{"persons":[{},{}]}

         e、对象(在花括号中) 如: {"address":{"province":"河北"....}}

         f、null :控制

    (2)数据有逗号分隔:多个键值对由逗号分隔

    (3)花括号保存对象:使用 {} 定义 json 格式

    (4)方括号保存数据:[]

  2、获取数据

    (1)json对象.键名

    (2)json对象["键名"]

    (3)数组对象[索引]

    (4)遍历对象

      代码演示:

   <script>
//1.定义基本格式
var person = {"name": "张三", age: 23, 'sex': true}; var ps = [{"name": "张三", "age": 23, "sex": true},
{"name": "李四", "age": 24, "sex": true},
{"name": "王五", "age": 25, "sex": false}]; //获取person对象中所有的键和值
//for in 循环
/* for(var key in person){
//这样的方式获取不行,key 是字符串类型。因为相当于 person."name"
//alert(key + ":" + person.key);
alert(key+":"+person[key]);
}*/ //获取ps中的所有值
for (var i = 0; i < ps.length; i++) {
var p = ps[i];
for(var key in p){
alert(key+":"+p[key]);
}
} </script>

三、JSON 数据和 Java 对象的相互转换

  1、JSON 解析器

    常见的解析器:Jsonlib,Gson,fastjson,jackson

  2、Java 对象转换为 JSON

    使用步骤:

      (1)导入 Jackson 的相关 jar 包

      (2)创建 Jackson 的核心对象 ObjectMapper

      (3)调用 ObjectMapper 的相关方法进行转换

        ① 转换方法

writeValue(参数1,obj):

            参数1:

            • File:将obj对象转换为JSON字符串,并保存到指定的文件中
            • Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
            • OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
writeValueAsString(obj):将对象转为json字符串

        ② 注解

 @JsonIgnore:排除属性。   // 加到 JavaBean 上时,便不会对该属性转化为 json 数据
@JsonFormat:属性值得格式化 // 多用于时间类型的成员变量上,来格式化,如@JsonFormat(pattern = "yyyy-MM-dd")

  

        ③ 复杂 java 对象转换

           对于 List 和 Map 集合来说,转换成 json 数据后,会转换为一个对象数组字符串。

  3、JSON 对象转为 Java 对象

     步骤同上,只是调用的方法不同。

     转化为 Java 对象的方法:

readValue(json字符串数据,转化为类型的Class)

      代码演示:

 public void test() throws Exception {
//1.初始化JSON字符串
String json = "{\"sex\":\"男\",\"name\":\"张三\",\"age\":23}"; //2.创建ObjectMapper对象
ObjectMapper mapper = new ObjectMapper();
//3.转换为Java对象 Person对象
Person person = mapper.readValue(json, Person.class); System.out.println(person);
}

四、检验用户是否存在案例

需求:

1、在注册页面进行验证,当用户输入用户名时,如果已经存在该用户名,提示“此用户名太受欢迎,请更换一个”;

2、如果没有用户名存在,提示"用户名可用"

代码实现:

  注册页面:

 <!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"); // 设置返回数据为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>

  服务器端代码:

 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":"用户名可用"} //设置响应的数据格式为json
response.setContentType("application/json;charset=utf-8");
Map<String,Object> map = new HashMap<String,Object>(); if("jack".equals(username)){
//存在
map.put("userExsit",true);
map.put("msg","此用户名太受欢迎,请更换一个");
}else{
//不存在
map.put("userExsit",false);
map.put("msg","用户名可用");
} //将map转为json,并且传递给客户端
//将map转为json
ObjectMapper mapper = new ObjectMapper();
//并且传递给客户端
mapper.writeValue(response.getWriter(),map); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

最新文章

  1. Swift注释
  2. 插件~NuGet与packages管理项目的包包
  3. 深入解析MySQL分区(Partition)功能
  4. Docker 使用指南 (一)—— 基本操作
  5. 【Spark学习】Apache Spark配置
  6. C# 窗体程序入门 之计算器
  7. 【solr这四个主题】大约VelocityResponseWriter
  8. web代理进行跨域访问
  9. FZU 1889 龟兔赛跑
  10. Netty——简单创建服务器、客户端通讯
  11. 微信小程序wx.request请求用POST后台得不到传递数据
  12. 毕向东—Java基础知识总结(超级经典)
  13. 用jquery获取A标签href参数
  14. C++ 自定义时间
  15. Linux内核分析 笔记六 进程的描述和进程的创建 ——by王玥
  16. 谷歌Chrome浏览器无法安装插件的解决方法
  17. centos6.5安装部署zabbix监控服务端和客户端
  18. 解决The type &#39;ASP.global_asax&#39; exists in both ASP.global_asax同时存在问题
  19. Java数组搜索和比较
  20. spring boot继承web和mybatis时,调用接口删除记录出现的空指针以及解决办法

热门文章

  1. pandas.DataFrame.astype数据结构转换
  2. Linux安装fcitx输入法(命令安装)
  3. 运维笔记--给正在运行的Docker容器动态绑定卷组(挂载指定目录)
  4. Qt开发经验小技巧81-90
  5. 【451】python 同一行打印进度条
  6. IDEA中Lombok插件的安装及使用
  7. 【Spring Cloud学习之六】断路器-Hystrix
  8. 【Maven学习】Eclipse使用maven问题集
  9. c++中共享内存原理及实现
  10. asp net core Remote Validation 无法验证