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 上弹出的对话框中显示的纯文 ...
随机推荐
- Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 解决办法(转)
使用yum update 更新的时候出现 “Couldn’t open file /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7” 这样的提示,去CentOS的官网:htt ...
- tp使用ajaxReturn返回二维数组格式的字符串,前台如何获取非乱码
参考: https://www.cnblogs.com/jiqing9006/p/5000849.html https://blog.csdn.net/zengxiangxuan123456/arti ...
- 使用python脚本批量设置nginx站点的rewrite规则
一般情况下,配置rewrite重写规则使用shell脚本即可: 把url拼凑成1,2文件中中的格式,运行 chongxie.sh 即可生成我们需要的rewrite规则 [root@web01:/opt ...
- pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your path
使用pytesseract识别验证码中遇到异常如下: pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installe ...
- (转)2019年 React 新手学习指南 – 从 React 学习线路图说开去
原文:https://www.html.cn/archives/10111 注:本文根据 React 开发者学习线路图(2018) 结构编写了很多新手如何学习 React 的建议.2019 年有标题党 ...
- 带有Q_OBJECT的类要放在头文件的第一个类位置,否则可能无法moc
如果头文件中有多个类,带有Q_OBJECT的类要放在头文件的第一个类位置,否则可能无法moc
- SDN实验---Ryu的应用开发(四)北向接口RESTAPI
一:推文 软件定义网络基础---REST API概述 软件定义网络基础---REST API的设计规范 二:掌握Ryu基本RESTAPI使用方法 (一)Ryu的RESTAPI (二) REST应用样例 ...
- 转 zabbix 自动发现和 zabbix自定义用户key与参数User parameters
########31 https://www.cnblogs.com/yjt1993/p/10883345.html 1.概念 在配置Iterms的过程中,有时候需要对类似的Iterms进行添加,这些 ...
- 使用VEGAS2(Versatile Gene-based Association Study)进行gene based的关联分析研究
gene-based关联分析研究是SNP-based关联分析研究的一个补充. 目前有很多工具支持gene-based关联分析研究,比如GCTA,VEGAS2等. 下面主要介绍一下怎么用VEGAS2做g ...
- Linux 修改用户的JDK版本
1. vi .bash_profile 2.复制以下到bash_profile 文件,并将此文件里原来的JAVA_HOME和PATH删掉 JAVA_HOME=/java/jdk1..0_22 JRE ...