一、概述

  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. crc64

    oss2\models.py class PartInfo(object):     """表示分片信息的文件. 该文件既用于 :func:`list_parts < ...

  2. 蓝牙BLE: 蓝牙(BLE)协议栈

    蓝牙协议是通信协议的一种,一般而言,我们把某个协议的实现代码称为协议栈(protocol stack),BLE协议栈就是实现低功耗蓝牙协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提.当前的蓝 ...

  3. curl 参数配置详解

    第一类:对于下面的这些option的可选参数,value应该被设置一个bool类型的值: CURLOPT_AUTOREFERER当根据Location:重定向时,自动设置header中的Referer ...

  4. 笔记-JFB:业务流程梳理

    ylbtech-笔记-JFB:业务流程梳理 1.家政员找工作-->填写基本信息-->上岗申请--> 1.返回顶部 1. 2. 2. 2.返回顶部   3.返回顶部   4.返回顶部 ...

  5. kafka window环境下使用(内置zookeeper)

    下载 kafka 官网下载最新版本(已集成 zookeeper) 解压到 D 盘的 kafka_2.12-2.3.0 运行 zookeeper 执行 zookeeper 运行命令 D:\kafka_2 ...

  6. 浅入深出ETCD之【集群部署与golang客户端使用】

    前言 之前说了etcd的简介,命令行使用,一些基本原理.这次来说说现实一点的集群部署和golang版本的客户端使用.因为在实际使用过程中,etcd的节点肯定是需要2N+1个进行部署的,所以有必要说明一 ...

  7. 【GMT43智能液晶模块】例程十七:LAN_UDP实验——以太网数据传输

    源代码下载链接: 链接:https://pan.baidu.com/s/1CXeIohlqs7OjrgC9-QZjzg 提取码:be3d 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43 ...

  8. 如何上传本地jar至远程仓库供其他项目使用

    我们首先需要创建自己内部nexus私服仓库.这里假设你已经做好了. 其次我们要明白nexus上如下几个component的用处. maven-central:maven中央库,默认从https://r ...

  9. Qt编写安防视频监控系统15-远程回放

    一.前言 远程回放有两种处理方式,一种是采用NVR厂家提供的SDK开发包来登录到NVR上,然后根据SDK的函数接口指定的视频文件,当然也有接口查询视频文件列表等:一种是采用视频监控行业的国标GB281 ...

  10. 自动生成LR脚本且运行

    背景:作为一个测试,特别是性能测试,尤其在活动的测试,时间紧,有很多要测的,我们的LR11因为浏览器兼容问题全录制不了脚本了,用浏览器加代理或手机加代理录制,我感觉好麻烦 ,所以就想如果能用脚本把所有 ...