JavaWeb 之 JSON
一、概述
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的更多相关文章
- 项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!
前言 系列文章:[传送门] 洗了个澡,准备写篇博客.然后看书了.时间 3 7 分.我慢慢规律生活,向目标靠近. 很喜欢珍惜时间像叮当猫一样 正文 慢慢地,二维码实现签到将要落幕了.下篇文章出二维码实 ...
- JavaWeb之JSON
一.什么是JSON? JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML ...
- JavaWeb 返回json数据的两种方式
1.说明 由于一般情况下,由浏览器(前端)发送请求,服务器(后台)响应json数据,所以这里结合js进行说明: A服务器发送请求至B服务器,并接收其返回的json数据,见文末推荐,这里不再赘述! 2. ...
- JavaWeb基础——JSON
一.JSON是什么? JSON(JavaScript Object Notation).轻量级数据交换格式. JSON的后缀名:.json JSON的MINE类型:application/json 二 ...
- IT兄弟连 JavaWeb教程 JSON和JSON字符串
JSON (JavaScript Object Notation)是JavaScript语言中的一种对象类型.JSON的好处是易于阅读和解析.当客户端和服务器端需要交互大量数据时,使用JSON格式传输 ...
- 【JavaWeb】JSON基础
JSON JavaScript Object Notation(JavaScript 对象表示法): JSON是轻量级的文本数据交换格式: JSON独立于语言,具有自我描述性,更易理解: JSON语法 ...
- JavaWeb返回Json格式数据JQuery Ajax无法解析的问题
今天在写实验室的傻逼Java Web小项目的时候,有一个需要发布内容的地方,因为想做的让用户感觉优雅一点 所以就是用了Ajax来做,本来很简单的一个小玩意,竟然花了半个多小时的时间,主要是将时间花在了 ...
- 【JavaWeb】JSON 文件
JSON 文件 什么是 JSON JSON(JavaScript Object Notation),即 JS 对象符号. 是一种轻量级(相对于 XML 来说)的数据交换格式,易于阅读和编写,同时也易于 ...
- JavaWeb 补充(Json)
HTML DOM alert() 方法 定义和用法 alert() 方法用于显示带有一条指定消息和一个 OK 按钮的警告框. 参数 描述 message 要在 window 上弹出的对话框中显示的纯文 ...
随机推荐
- Ubuntu 16.04 catkin_make 常见操作
参考博客:https://answers.ros.org/question/54178/how-to-build-just-one-package-using-catkin_make/ 1. catk ...
- MSSQL Server 及 MSSQL Express版本 自动备份
一.SQL Server Management Studio(SMSS) 维护计划 [参考]SQL SERVER如何定期自动备份数据库 二.Windows 级 任务计划程序( MSSQL Expres ...
- 工控随笔_C#连接PLC_之_C#入门_03_基本数据类型
using System; using System.Collections.Generic; using System.Linq; using System.Text; //namespace 关键 ...
- (转) 解决django项目部署到nginx+uwsgi服务器后 admin页面样式消失的问题
原贴地址:https://blog.csdn.net/qq_42571805/article/details/80862455 摘要 uwsgi为主要服务器,nginx为反向代理服务器部署完成之后发现 ...
- laravel操作mongo详细说明
原文地址:http://returnc.com/detail/3728 一个Eloquent模型和Query构建器,支持MongoDB,使用原始的Laravel API.该库扩展了原始的Larav ...
- Linux 就该这么学 CH04 VIM编辑器和Shell命令脚本
0 概述 1 Vim编辑器 在linux 中一切都是文件,而配置一个服务就是修改其配置文件的参数. vim 编辑器有三种模式:命令模式,末行模式和编辑模式. 命令模式:控制光标移动,对文件进行操作. ...
- maven cloudara依赖下载
最近开发的项目使用到了cloudara的依赖,已经在pom.xml 中配置了cloudara的repository,但是还是无法下载 <repositories> <reposito ...
- Windows下安装gcc环境
安装GCC环境 https://gcc.gnu.org/ 点进去后 然后 然后 点击 再点击 点击 (啊,这是跳了多少个页面) 开始下载了.完成之后打开:(自动执行的) 弹出 点击OK,弹出个窗口,让 ...
- 山峰和山谷 Ridges and Valleys
题目描述 思路 一开始看这道题目,也不是很会,谁会把统计之类的问题和bfs联系在一起,没有开始的状态,没有结束的状态,题目中连一个最短之类的词也没有出现. 然后统计嘛,题目中说了方格高度都相同,就把周 ...
- Redis缓存雪崩、击穿、穿透
参考大佬 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联网公司面一次拿一次offer的面霸(请允 ...