JSON:

    1. 概念: JavaScript Object Notation        JavaScript对象表示法
    Person p = new Person();
    p.setName("张三");
    p.setAge(23);
    p.setGender("男");

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

    * json现在多用于存储和交换文本信息的语法
    * 进行数据的传输
    * JSON 比 XML 更小、更快,更易解析。
   
2. 语法:
    1. 基本规则
    * 数据在名称/值对中:json数据是由键值对构成的
        * 键用引号(单双都行)引起来,也可以不使用引号
        * 值得取值类型:
            1. 数字(整数或浮点数)
            2. 字符串(在双引号中)
            3. 逻辑值(true 或 false)
            4. 数组(在方括号中)    {"persons":[{},{}]}
            5. 对象(在花括号中) {"address":{"province":"陕西"....}}
            6. null
    * 数据由逗号分隔:多个键值对由逗号分隔
    * 花括号保存对象:使用{}定义json 格式
    * 方括号保存数组:[]
    2. 获取数据:
        1. json对象.键名
        2. json对象["键名"]
        3. 数组对象[索引]
        4. 遍历

 //1.定义基本格式var person = {"name": "张三", age: 23, 'gender': true};var ps = [{"name": "张三", "age": 23, "gender": true},{"name": "李四", "age": 24, "gender": true},{"name": "王五", "age": 25, "gender": false}];//获取person对象中所有的键和值//for in 循环/* for(var key in person){//这样的方式获取不行。因为相当于  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]);}}

3. JSON数据和Java对象的相互转换

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

1. JSON转为Java对象
    1. 导入jackson的相关jar包
    2. 创建Jackson核心对象 ObjectMapper
    3. 调用ObjectMapper的相关方法进行转换
        1. readValue(json字符串数据,Class)
2. Java对象转换JSON
    1. 使用步骤:
        1. 导入jackson的相关jar包
        2. 创建Jackson核心对象 ObjectMapper
        3. 调用ObjectMapper的相关方法进行转换
            1. 转换方法:
                * writeValue(参数1,obj):
                    参数1:
                        File:将obj对象转换为JSON字符串,并保存到指定的文件中
                        Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
                        OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
                * writeValueAsString(obj):将对象转为json字符串

            2. 注解:
                1. @JsonIgnore:排除属性。
                2. @JsonFormat:属性值得格式化
                    * @JsonFormat(pattern = "yyyy-MM-dd")

            3. 复杂java对象转换
                1. List:数组
                2. Map:对象格式一致

import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;import java.io.FileWriter;
import java.util.*;public class JacksonTest {//Java对象转为JSON字符串@Testpublic void test1() throws Exception {//1.创建Person对象Person p  = new Person();p.setName("张三");p.setAge(23);p.setGender("男");//2.创建Jackson的核心对象  ObjectMapperObjectMapper mapper = new ObjectMapper();//3.转换/*转换方法:writeValue(参数1,obj):参数1:File:将obj对象转换为JSON字符串,并保存到指定的文件中Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中writeValueAsString(obj):将对象转为json字符串*/String json = mapper.writeValueAsString(p);//{"name":"张三","age":23,"gender":"男"}//System.out.println(json);//{"name":"张三","age":23,"gender":"男"}//writeValue,将数据写到d://a.txt文件中//mapper.writeValue(new File("d://a.txt"),p);//writeValue.将数据关联到Writer中mapper.writeValue(new FileWriter("d://b.txt"),p);}@Testpublic void test2() throws Exception {//1.创建Person对象Person p = new Person();p.setName("张三");p.setAge(23);p.setGender("男");p.setBirthday(new Date());//2.转换ObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(p);System.out.println(json);//{"name":"张三","age":23,"gender":"男","birthday":1530958029263}//{"name":"张三","age":23,"gender":"男","birthday":"2018-07-07"}}@Testpublic void test3() throws Exception {//1.创建Person对象Person p = new Person();p.setName("张三");p.setAge(23);p.setGender("男");p.setBirthday(new Date());Person p1 = new Person();p1.setName("张三");p1.setAge(23);p1.setGender("男");p1.setBirthday(new Date());Person p2 = new Person();p2.setName("张三");p2.setAge(23);p2.setGender("男");p2.setBirthday(new Date());//创建List集合List<Person> ps = new ArrayList<Person>();ps.add(p);ps.add(p1);ps.add(p2);//2.转换ObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(ps);// [{},{},{}]//[{"name":"张三","age":23,"gender":"男","birthday":"2018-07-07"},{"name":"张三","age":23,"gender":"男","birthday":"2018-07-07"},{"name":"张三","age":23,"gender":"男","birthday":"2018-07-07"}]System.out.println(json);}@Testpublic void test4() throws Exception {//1.创建map对象Map<String,Object> map = new HashMap<String,Object>();map.put("name","张三");map.put("age",23);map.put("gender","男");//2.转换ObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(map);//{"name":"张三","age":23,"gender":"男"}System.out.println(json);//{"gender":"男","name":"张三","age":23}}//演示 JSON字符串转为Java对象@Testpublic void test5() throws Exception {//1.初始化JSON字符串String json = "{\"gender\":\"男\",\"name\":\"张三\",\"age\":23}";//2.创建ObjectMapper对象ObjectMapper mapper = new ObjectMapper();//3.转换为Java对象 Person对象Person person = mapper.readValue(json, Person.class);System.out.println(person);}}

 案例:

* 校验用户名是否存在
    1. 服务器响应的数据,在客户端使用时,要想当做json数据格式使用。有两种解决方案:
        1. $.get(type):将最后一个参数type指定为"json"
        2. 在服务器端设置MIME类型
            response.setContentType("application/json;charset=utf-8");

FinfUserServlet

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

register.html

<!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"*/);}); });</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>

java筑基期(10)----ajaxjson(2)相关推荐

  1. java筑基期(9)----ajaxjson(1)

    AJAX: 1. 概念: ASynchronous JavaScript And XML    异步的JavaScript 和 XML 1. 异步和同步:客户端和服务器端相互通信的基础上     * ...

  2. Eclipse调试Java的10个技巧【转】

    clipse调试Java的10个技巧 先提三点 不要使用System.out.println作为调试工具 启用所有组件的详细的日志记录级别 使用一个日志分析器来阅读日志 1.条件断点 想象一下我们平时 ...

  3. JAXB在Java 9/10并且使用Tomcat 9的问题

    Implementation of JAXB-API has not been found on module path or classpath. JAXB API是java EE 的API,jav ...

  4. 几周内搞定Java的10个方法

     几周内搞定Java的10个方法 不要将Java与JavaScript弄混了,Java的目标是"一次编译,到处调试"(呃,不对,是"到处运行").简单来说, ...

  5. java误解问题_关于Java的10个误解

    下面的这些都算是比较高级的问题了,面试中一般也很少问到,因为它们可能会把面试者拒之门外.不过你可以自己找个时间来实践一下. 1. System.exit(0)会跳过finally块的执行 System ...

  6. 关于Java你不知道的10件事

    转载自 关于Java你不知道的10件事 作为 Java 书呆子,比起实用技能,我们会对介绍 Java 和 JVM 的概念细节更感兴趣.因此我想推荐 Lukas Eder 在 jooq.org 发表的原 ...

  7. Java JDK 10会有什么期望

    由于我们刚刚习惯于9月发布的Java 9,因此距离下一代Java的发布只有几个月的时间了. 就在本月,计划中的Java Development Kit 10升级已进入开发的主要减速阶段. 在第一个初始 ...

  8. Java基础10(反射)

    Java基础10(反射) 1 什么是反射 官方解释:反射(reflection)技术通常被用来检测和改变应用程序在 Java 虚拟机中的行为表现.它是一个相对而言比较高级的技术,反射是一种强有力的技术 ...

  9. Java JDK 10:下一代 Java 有哪些新特性?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 工欲善其事,必先利其器.作为老牌军 Java 在发行二十多年的今天,战胜了 C 和 C++, ...

最新文章

  1. Quartz.Net 调度框架配置介绍
  2. vmware 扩展Ubuntu虚拟机的磁盘空间
  3. ng-repeat循环出来的部分调用同一个函数并且实现每个模块之间不能相互干扰
  4. android半透明闪退,(Android)react-native-splash-screen实践-解决react-native打包好后启动白屏的问题...
  5. 计算机科学概论文正,北京工业大学软件学院硕导介绍-李文正
  6. 网络教学的即时通讯视频
  7. calibre转换电子书格式教程
  8. DaVinci:Camera Raw
  9. 一个好用的剪切板复制粘贴工具
  10. nRF53832开发环境搭建
  11. 关于微擎模块,点击上传图片无反映问题。
  12. win10查看显卡的运算能力
  13. css情景动画,css3中的动画属性animation应用场景及编写代码教程
  14. 智工教育:一级建造师《公路实务》考前必背知识点
  15. 小程序访问本地服务器注意点
  16. C++.继承——虚继承
  17. 裸辞接单第一个月的收入
  18. ios和android更新,Android和iOS同时进行更新 这次又带来什么
  19. 一篇文章带你了解Python中的游戏开发模块pyglet
  20. 【Selenium Grid 分布式测试】Selenium Grid-简介

热门文章

  1. JPA_‘Basic‘ attribute type should not be a container怎么解决
  2. c语言cin n1 n2,牛客等级之题N1 追债之旅 - N2 Rinne Loves Study(8.6场)
  3. php读文阻塞,php socket编程 读完成后写阻塞
  4. 一文了解2020年中国液冷数据中心行业市场现状与发展前景分析市场规模有望破千亿...
  5. 被捞起的“海底数据中心”,故障率仅为陆地1/8,微软新型数据存储模式又有新进展...
  6. 供配电负荷计算方法详解
  7. 11个三相异步电动机常见故障与维修方法。
  8. left join 不重复_R语言ETL工程:连接(join)
  9. ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测
  10. 成功解决你没有权限访问,请与网络管理员联系图文教程