一、概述

  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);
}
}

JavaWeb 之 JSON的更多相关文章

  1. 项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

    前言 系列文章:[传送门] 洗了个澡,准备写篇博客.然后看书了.时间 3 7 分.我慢慢规律生活,向目标靠近.  很喜欢珍惜时间像叮当猫一样 正文 慢慢地,二维码实现签到将要落幕了.下篇文章出二维码实 ...

  2. JavaWeb之JSON

    一.什么是JSON? JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML ...

  3. JavaWeb 返回json数据的两种方式

    1.说明 由于一般情况下,由浏览器(前端)发送请求,服务器(后台)响应json数据,所以这里结合js进行说明: A服务器发送请求至B服务器,并接收其返回的json数据,见文末推荐,这里不再赘述! 2. ...

  4. JavaWeb基础——JSON

    一.JSON是什么? JSON(JavaScript Object Notation).轻量级数据交换格式. JSON的后缀名:.json JSON的MINE类型:application/json 二 ...

  5. IT兄弟连 JavaWeb教程 JSON和JSON字符串

    JSON (JavaScript Object Notation)是JavaScript语言中的一种对象类型.JSON的好处是易于阅读和解析.当客户端和服务器端需要交互大量数据时,使用JSON格式传输 ...

  6. 【JavaWeb】JSON基础

    JSON JavaScript Object Notation(JavaScript 对象表示法): JSON是轻量级的文本数据交换格式: JSON独立于语言,具有自我描述性,更易理解: JSON语法 ...

  7. JavaWeb返回Json格式数据JQuery Ajax无法解析的问题

    今天在写实验室的傻逼Java Web小项目的时候,有一个需要发布内容的地方,因为想做的让用户感觉优雅一点 所以就是用了Ajax来做,本来很简单的一个小玩意,竟然花了半个多小时的时间,主要是将时间花在了 ...

  8. 【JavaWeb】JSON 文件

    JSON 文件 什么是 JSON JSON(JavaScript Object Notation),即 JS 对象符号. 是一种轻量级(相对于 XML 来说)的数据交换格式,易于阅读和编写,同时也易于 ...

  9. JavaWeb 补充(Json)

    HTML DOM alert() 方法 定义和用法 alert() 方法用于显示带有一条指定消息和一个 OK 按钮的警告框. 参数 描述 message 要在 window 上弹出的对话框中显示的纯文 ...

随机推荐

  1. Mini UI tree上万复杂节点加载缓慢处理设计

    最直接的方式是设置tree顶级不展开,可以解决一定效率. expandOnLoad Boolean/Number 加载后是否展开.比如:true展开所有节点:0展开第一级节点.以此类推. 1. 解决问 ...

  2. 阻止Bootstrap 模态框点击背景空白处自动关闭

    问题描述 模态框点击空白处,会自动关闭,怎么阻止关闭事件呢? 解决方法 在HTML页面中编写模态框时,在div初始化时添加属性 aria-hidden=”true” data-backdrop=”st ...

  3. sigmoid与softmax 二分类、多分类的使用

    二分类下,sigmoid.softmax两者的数学公式是等价的,理论上应该是一样的,但实际使用的时候还是sigmoid好 https://www.zhihu.com/question/29524708 ...

  4. odoo开发笔记 -- 借助模块queue_job实现异步方法调用

    场景描述: 对比了几个定时调度的框架,发现各有优缺点: celery 很强,异步定时调度,异步周期调度,也有延时调度的功能,但是延时调度的案例比较少,遂暂时不使用. queue_job,一个odoo第 ...

  5. apache环境.htaccess设置301跳转及常用.htaccess技巧整理

    apache环境.htaccess设置301跳转及常用.htaccess技巧整理 无论是Nginx,还是Apache都各自有优势,对于我们普通用户而言基本上也没有多大的区别.在虚拟主机环境中,基本上都 ...

  6. 登陆服务器提示“You need to run "nvm install N/A" to install it before using it.”

    一.登陆服务器提示“You need to run "nvm install N/A" to install it before using it.” 二.执行命令: nvm ls ...

  7. Java 各种时间日期相关的操作

    目录 1.获取当前时间的时间戳 1.1.时间进制 1.2.获取毫秒级时间戳 1.3.获取纳秒级时间戳 2.java.util包 2.1.Data 2.2.Calendar 3.java.time包 3 ...

  8. idel上传代码到github时遇到的Push rejected: Push to origin/master was rejected

    1 没有权限 2 先pull之后,再push即可

  9. 简单易用的录屏软件(保存为gif文件)

    LICEcap https://licecap.en.softonic.com/ Create animated GIFs from your desktop LICEcap is an origin ...

  10. IDEA @override处标红

    报错问题如下 这个是没有导入父类,无法重写父类的方法 创建项目的时候没有使用jdk1.6以上的版本.将版本更正就好了