什么是JSON ,ajax和json关系

一. JSON

1 JSON概述

JavaScript对象文本表示形式(JavaScript Object Notation : js对象简写)

json是js对象

json是目前 前后端数据交互的主要格式之一

* java对象表示形式
		User user = new User();
			user.setUsername("后羿");
			user.setAge(23);
			user.setSex("男");
			...
			
		Product product = new Product();
			product.setName("小米10");
			product.setDesc("1亿像素的手机小王子");
			
* javaScript对象表示形式
       
		let user ={"username":"后羿","age":23,"sex":"男"}
		let product = {"name":"小米10","desc":"1亿像素的手机小王子"}

json可以取代XML笨重的数据结构,和xml相比:更小、更快,更易解析

json、xml作用:作为数据的载体,在网络中传输

在这里插入图片描述

小结:

1.json在js中是一个对象,在java中是字符串

2.作用:用来前后台数据的传输的

3.格式:

{key:value,key:value,....} 
建议:json的key其实随便定义,不书写双引号也可以,值如果是字符串,在js中使用单引号双引号都可以。但是我们后期会将json的数据传递到后台服务器极java代码中,由于单引号和双引号在java中是有区别的。因此建议json的key最好使用双引号,值如果是字符串最好也使用双引号。
{"username":"锁哥","password":"1234","age":18}; 

2 JSON基础语法

json是一种特殊的 js 对象

#json的语法主要有两种:
        1. 对象 { }
        2. 数组 [ ]
        
1. 对象类型
		{name:value,name:value,....}
		
2. 数组类型
		[
            {name:value,name:value}, 
            {name:value,name:value},
            {name:value,name:value}
		]
		
3. 复杂对象
		{
            name:value,
            wives:[{name:value},{},{}],
            son:{name:value}
		}
#注意: 
	1. 其中name必须是string类型
		json在js中,name的双引号可以省略,建议加双引号
	2. value必须是以下数据类型之一:
		字符串
		数字
		对象(JSON 对象)
		数组
		布尔
		Null
	3. JSON 中的字符串必须用双引号包围。(单引号不行!主要是涉及到后期在后端java代码中操作)	
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <script type="text/javascript">
      /*
          json介绍
            1.定义格式 1:{key:value,key:value,...}
            2.定义格式 2:
                [{key:value,key:value,...},{key:value,key:value,...},{key:value,key:value,...},...]
            3.定义格式 3:
                {key:value,key:[key:value,key1:value1,...],key:value,...}


            说明:
              1)在json中key是字符串,可以加引号,也可以不加,建议加双引号
              2)在json中value是什么类型就书写什么,如果是字符串类型,一定使用双引号
              3)如果定义的json是:let 对象名 = {key:value,key:value,...} 获取value值:对象名.key
              4)如果定义的json是:let 数组名 = [{key1:value1,key2:value2,...},{key3:value3,key4:value4,...}]
                        获取value4值:数组名[1].key4  === 1表示数组索引1的位置
              5)如果定义的json是:let 对象名 = {key:value,key2:[key:value,key1:value1,...],key:value,...}
                        获取value1值:对象名.key2[1].key1
       */
      //1.定义格式:{key:value,key:value,...}
      let oJson = {"username":"锁哥","age":18,"sex":"男"};
      //需求:获取18
      console.log(oJson.age);//18

      /*
        2.定义格式 2:
                [{key:value,key:value,...},{key:value,key:value,...},{key:value,key:value,...},...]
       */
      let a1 = [{"username": "锁哥", "age": 18, "sex": "男"}, {"username": "柳岩", "age": 19, "sex": "女"}];
      //需求:获取柳岩
      //a1[1] 获取的是{"username": "柳岩", "age": 19, "sex": "女"},是一个对象,是对象就可以使用   对象.key  获取value
      console.log(a1[1].username);//柳岩

     /*
        3.定义格式 3:
                {key:value,key:[{},{},...],key:value,...}
     */
      let oJson2={"company":"黑马程序员","persons":[{"username":"锁哥","age":18},{"username":"坡坡","age":28}]};
      //获取坡坡
      console.log(oJson2.persons[1].username);//对象.key获取value,数组就遍历取出每个对象


  </script>
</body>
</html>

补充:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二. ajax和json综合

2.1 响应数据是json格式

需求:向后台发送请求,获取好友列表并显示到页面中

【1】html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>ajax和json综合</h1>
<!--
    获取好友列表
-->
<input type="button" value="响应数据是json字符串" onclick="method01()"> <br>
<hr>
<h3>好友列表</h3>
<!--存放查询好友的结果信息-->
<div id="messageDiv"></div>
<table width="500px" cellspacing="0px" cellpadding="5px" border="1px" id="myTable">
    <tr>
        <th>id</th>
        <th>name</th>
        <th>age</th>
    </tr>
    <!--<tr>
        <td></td>
        <td></td>
        <td></td>
    </tr>-->

</table>

</body>
<!--导入axios库-->
<script type="text/javascript" src="js/axios-0.18.0.js"></script>
<script type="text/javascript">
    /*
      需求:向后台发送请求,获取好友列表并显示到页面中
      说明:后台的url地址: "http://localhost:8080/axiosJsonDemo01Servlet"
     */

     function method01() {
        //向后台发送请求
        axios.post("http://localhost:8080/axiosJsonDemo01Servlet")
            .then(resp => {
                //1.接收后端响应的Result对象
                let obj = resp.data;
                console.log(obj);
                //2.判断是否成功
                if (obj.flag) {
                    //查询成功
                    document.getElementById('messageDiv').innerHTML = obj.message;
                    //取出数组
                    let arr = obj.valueData;
                    //遍历数组取出每个json对象
                    //定义变量保存每个对象的数据的tr内容
                    let content = "";
                    for (let friend of arr) {//friend 表示每个json对象===={age: 18, id: '001', name: '张三'}
                        //这里书写是+= 累加
                        content += `
                                  <tr>
                                     <td>${friend.id}</td>
                                     <td>${friend.name}</td>
                                     <td>${friend.age}</td>
                                 </tr>
                                `
                    }
                    //3.获取table标签对象
                    let oTable = document.getElementById('myTable');
                    //4.将获取的数据即content放到table标签的文本中 appendChild
                    oTable.innerHTML += content;//这里使用+=,这样就不会覆盖原来的表头tr

                } else {
                    //查询失败
                    document.getElementById('messageDiv').innerHTML = obj.message;
                }
            });
    }
</script>

</html>

【2】后端代码

package com.itheima.sh.b_json_02;

import com.alibaba.fastjson.JSON;

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.ArrayList;
import java.util.Collections;

@WebServlet("/axiosJsonDemo01Servlet")
public class AxiosJsonDemo01Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            response.setContentType("text/html;charset=utf-8");
            // 需求:查询当前用户的好友 List<Friend> list,转成json格式字符串,最后响应
            //1.创建集合对象保存多个好友
            ArrayList<Friend> list = new ArrayList<>();
            //2.向集合添加数据
            Collections.addAll(list, new Friend("001", "张三", 18), new Friend("002", "李四", 19),
                    new Friend("003", "王五", 20));

            //3.创建Result类的对象
            /*
                true : 表示查询成功
                "查询好友列表成功" 查询好友成功的信息
                list:存放好友的集合数据
             */
            Result result = new Result(true, "查询好友列表成功", list);

//            int i = 1/0;

            //5.使用fastjson中的JSON类的方法String toJsonString(Object obj)
            String s = JSON.toJSONString(result);
            //5.响应给前端
            response.getWriter().print(s);
        } catch (Exception e) {
            e.printStackTrace();
            //告知浏览器查询好友列表失败
            /*
                false : 表示查询失败
                "查询好友列表成功" 查询好友成功的信息
                list:存放好友的集合数据
             */
            Result result = new Result(false, "查询好友列表失败");
            //5.使用fastjson中的JSON类的方法String toJsonString(Object obj)
            String s = JSON.toJSONString(result);
            //5.响应给前端
            response.getWriter().print(s);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/772267.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开发国际短剧系统的策略解析

一、明确项目目标和需求 1、功能需求&#xff1a;确定系统应具备的基本功能&#xff0c;如用户注册、登录、浏览短剧、评论、分享、个性化推荐等。 2、性能需求&#xff1a;确保系统能够承受高并发访问&#xff0c;保证视频流畅播放&#xff0c;减少卡顿和延迟。 3、跨文化传播…

中序遍历的两种实现——二叉树专题复习

递归实现&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…

【算法】(C语言):堆排序

堆&#xff08;二叉树的应用&#xff09;&#xff1a; 完全二叉树。最大堆&#xff1a;每个节点比子树所有节点的数值都大&#xff0c;根节点是最大值。父子索引号关系&#xff08;根节点为0&#xff09;&#xff1a;&#xff08;向上&#xff09;子节点x&#xff0c;父节点(x…

命令行升级ubuntu版本过程中出现的grub问题 解决

1、问题描述 使用命令行升级ubuntu18到20版本后&#xff0c;系统提示重启&#xff0c;使用reboot命令重启后&#xff0c;不显示服务器ip&#xff0c;或是显示但无法ssh远程连接服务器了&#xff0c;使用屏幕连接服务器后发现出现grub问题。 2、问题经过 命令行输入如下升级u…

【虚拟机】虚拟机网络无法访问问题【已解决】

【虚拟机】虚拟机无法上网问题【已解决】 问题探究解决方法法1&#xff1a;查看相关“网络服务”是否处于正常启动状态法2&#xff1a;重启网络法3&#xff1a;重新安装VMWare法4&#xff1a;使用NAT模式&#xff0c;每次打开win7都没连上网的解决办法 问题探究 安装了很多个虚…

Objection 对命令的批量操作

假定现在需要对好多不同的类进行批量hook&#xff0c;逐个hook非常繁琐&#xff0c;那么可以要将这些hook的类放到一个文件里&#xff0c;并且在这些类的前面加上hook命令&#xff0c;内容如下 使用如下命令执行该文件中的命令 objection -g 测试 explore -c d:/hookData/toHoo…

如何从腾讯云迁移到AWS

随着跨境出海潮不断扩大&#xff0c;企业越来越意识到将工作负载迁移到海外节点的必要性&#xff0c;以获取更多功能、灵活性和性能。然而&#xff0c;顺利迁移业务主机并确保业务稳定访问是一项具有挑战性的任务。在此挑战中&#xff0c;借助AWS迁移工具和迁移流程的强大支持&…

docker 安装 禅道

docker pull hub.zentao.net/app/zentao:20.1.1 sudo docker network create --subnet172.172.172.0/24 zentaonet 使用 8087端口号访问 使用禅道mysql 映射到3307 sudo docker run \ --name zentao2 \ -p 8087:80 \ -p 3307:3306 \ --networkzentaonet \ --ip 172.172.172.…

WIN32核心编程 - 进程操作(一) 进程基础 - 创建进程 - 进程句柄

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 进程基础 进程的定义与概念 进程的组成 创建进程 可执行文件 CreateProces 执行流程 GetStartupInfo 进程终止 进程句柄 创建进程 打开进程 进程提权 内核模拟 回溯对象 自身进…

有哪些好用的eHR人事系统?国内外HR软件选型指南分享

在人力资源管理信息化这个问题上&#xff0c;不同行业的企业对人力资源管理软件的需求侧重点不一样&#xff0c;并且通常企业规模决定了企业需求的强烈程度&#xff0c;以及能花在这个软件采购上的预算。 首先需要对公司需要人力资源软件的目的和基本需求加以明确。你为什么想用…

软件测试必问必背面试题

01 软件测试理论部分 1.1 测试概念 1. 请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试 单元测试&#xff1a;完成最小的软件设计单元&#xff08;模块&#xff09;的验证工作&#xff0c;目标是确保模块被正确的编码集成测试&#xff1a;通过测试发现与…

【Linux】探索网络编程:TCP/UDP协议解析与Socket应用实例

文章目录 前言&#xff1a;1. 预备知识1.1 理解源IP地址和目的IP地址1.2 认识端口号1.3 理解"端口号"和"进程ID"1.4 理解源端口号和目的端口号1.5 认识TCP协议1.6 认识UDP协议1.6 TCP vs UDP 可靠性1.7 网络字节序 2. socket 编程接口2.1 socket 常见API2.…

为了SourceInsight从Linux回到Windows

什么是SourceInsight 现在上网搜索这个软件&#xff0c;大多数说他是一个代码阅读软件&#xff1b;但是在官方的说法里面&#xff0c;这是一款支持多语言的编辑器。大概长这样&#xff1a; 看起来十分老旧是吧&#xff0c;但是他其实他已经是第四代了哈哈哈。其实这个软件是我…

LeetCode 全排列

思路&#xff1a;这是一道暴力搜索问题&#xff0c;我们需要列出答案的所有可能组合。 题目给我们一个数组&#xff0c;我们很容易想到的做法是将数组中的元素进行排列&#xff0c;如何区分已选中和未选中的元素&#xff0c;容易想到的是建立一个标记数组&#xff0c;已经选中的…

开发电商ERP系统需要接入哪些平台API?

跟随全渠道发展趋势&#xff0c;很多实体商家开设电商店铺&#xff0c;为消费者提供便捷的购物体验&#xff0c;增强消费者的满意度&#xff0c;同时也提升了企业自身的市场竞争力。为了满足商家业务拓展需求&#xff0c;很多原本主要服务于实体商贸企业的ERP服务商&#xff0c…

vim快捷键 提高工作效率

目录 1. :set nu 显示行号 :set nonu 取消显示行号 2. End 快速移动光标到行尾 3. Home 快速移动光标到行首 4. 10G 快速移动光标到第10行 5. G 快速到文件的底部 6. 1G 快速到第一行 &#xff08;gg&#xff09; 7. …

[Mysql] 的基础知识和sql 语句.教你速成(下)——数据库的约束篇

目录 前言 约束 一.我们为什么需要约束 二.常见的约束类型 NOT NULL 约束 UNIQUE 约束 DEFAULT 约束 PRIMARY KEY FOREIGN KEY CHECK约束 原因&#xff1a; 结尾 前言 距离上篇的更新已经快两周了,这个时候大伙都已经考完了吧!现在更新多少有点马后炮,但是没办法呀…

Kubernetes基于helm安装 harbor

Kubernetes基于helm安装 harbor 之前harbor的安装都是借助docker完成一键安装部署&#xff0c;安装完成之后harbor组件均运行到一台机器上面&#xff0c;本文实践harbor在k8s环境中的部署。 准备工作 根据harbor官方要求&#xff1a; Kubernetes cluster 1.20Helm v3.2.0 …

精准定位推广盲点?Xinstall数据监测让每一分投入都见成效!

在这个数字化时代&#xff0c;App的推广早已不再是简单的“上线即成功”。面对激烈的市场竞争和日益挑剔的用户&#xff0c;如何精准监测推广数据&#xff0c;优化营销策略&#xff0c;成为了每个开发者与营销人员不得不面对的挑战。而在这个关键时刻&#xff0c;Xinstall作为一…

shark云原生-日志体系-filebeat高级配置(适用于生产)

文章目录 1. filebeat.inputs 静态日志收集器2. filebeat.autodiscover 自动发现2.1. autodiscover 和 inputs2.2. 如何配置1.2.1. Providers 提供者1.2.2. Providers kubernetes templates1.2.3. 基于提示&#xff08;hints&#xff09;的自动发现支持的 **hints**的完整列表&…