JSON&Ajax(语法格式+解析json)

简介: 导读模块:发展史:21世纪初,Douglas Crockford寻找一种简便的数据交换格式,能够在服务器之间交换数据。当时通用的数据交换语言是XML,但是Douglas Crockford觉得XML的生成和解析都太麻烦,所以他提出了一种简化格式,也就是Json。

1.json规则

导读模块:发展史:

21世纪初,Douglas Crockford寻找一种简便的数据交换格式,

能够在服务器之间交换数据。当时通用的数据交换语言是XML,

但是Douglas Crockford觉得XML的生成和解析都太麻烦,

所以他提出了一种简化格式,也就是Json。


JSON:是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率


简而言之:是存储数据的一种方式/格式


与之类似的技术有:xml


JSON 语法规则:

1.对象表示为键值对

2.数据由逗号分隔

3.花括号保存对象

4.方括号保存数组

{
    "name": "中国",
    "province": [{
        "name": "黑龙江",
        "cities": {
            "city": ["哈尔滨", "大庆"]
        }
    }, {
        "name": "广东",
        "cities": {
            "city": ["广州", "深圳", "珠海"]
        }
    }, {
        "name": "台湾",
        "cities": {
            "city": ["台北", "高雄"]
        }
    }, {
        "name": "新疆",
        "cities": {
            "city": ["乌鲁木齐"]
        }
    }]
}

那么这段json表示的意思为:中国:黑龙江 ,广东,台湾,新疆,以及他们的主要城市

ps:我们也可以用在线工具校验帮我门节省时间和力气:https://www.sojson.com/

拓展:bson

继续拓展:ProtoBuf

2.Ajax在jquery里的使用方法

2.0.Ajax的本地加载 $("#div1").load实现的方法(如果没有后台程序的时候用这个)

  1. 什么是Ajax?

是指一种创建交互式网页应用的网页开发技术

是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术

简而言之:就是异步无刷新(局部刷新)的获取数据的一种技术

参数:

  • 必需的 URL 参数规定您希望加载的 URL:统一资源定位符,可以简单的理解为是网址。
  • 可选的 data 参数规定与请求一同发送的查询字符串键/值对集合:请求时传递的一个参数
  • 可选的 callback 参数是 load() 方法完成后所执行的函数名称
  • callback 参数规定当 load() 方法完成后所要允许的回调函数。
  • 回调函数可以设置不同的参数:
  • responseTxt - 包含调用成功时的结果内容
  • statusTXT - 包含调用的状态
  • xhr - 包含 XMLHttpRequest 对象
<!DOCTYPE html>
<html>
    <head>
    <meta charset="utf-8">
    <title>AJAX获取外部数据信息</title>
    <script src="../js/jquery.js"></script>
        <script>
        $(function(){
      $("button").click(function()
      {
                //请求文件    //请求成功时的结果内容  状态码  XMLHttpRequest      
          $("#div1").load("123.txt",function(responseTxt,statusTxt,xhr)
            {
            if(statusTxt=="success")
            {
                alert("请求的内容:"+responseTxt)
                alert("error:"+xhr.status+":"+xhr.statusText);
              }           
            if(statusTxt=="error")
            {               //xhr 的 错误信息 
                alert("状态码:"+xhr.status+":"+xhr.statusText);
            }
            });
      })
  })
        </script>
    </head>
<body>
<div id="div1"><h2>使用 jQuery AJAX 修改文本内容</h2></div>
<button>获取外部内容</button>
</body>
</html>

2.1通过XHR对象创建(已经过时,不推荐使用)

2.2通过Jquery实现Ajax

基本原理:.通过jquery实现Ajax

  • 在页面引入jquery.js文件
  • 在相应的位置使用即可

需求:

  • 按钮点击使用 ajax进行异步请求
  • 请求回来的数据进行解析
  • 将数据渲染成列表显示到页面中

http请求:

  • get():获取数据
  • post()提交数据

状态码:

  • 4xx 请求出了问题,提供参数,路径有问题, 假如我将文件修改为movie_list.json123,那么此时就会出现错误的状态码404
  • 5xx 服务器内部逻辑,需要开发人员自行修复bug (例如执行查询的时候,可以通过制造“2/0”这样的错误就能看到)
  • 3xx 请求转发(当执行删除,保存等操作之后因为要重定向,所以此时会通过谷歌浏览器看到先执行的状态码为302,然后为200,这就是请求转发)
  • 200:正常

ps:小结:200正确不用管,4X开头建议去页面找参数和路径,5X开头建议去后台看java代码,3X开头是转发(主要是逻辑的对与错)

步骤:


1.因为没有后台程序,所以此时我们用一个.json文件来充当数据来源(即是movie_list.json),并且将该文件引入到项目中


2.在页面中通过$.getJson来获取数据(因为我是要从.json文件中获取数据的)

$.getJson():通过 HTTP GET 请求载入 JSON 数据。

语法:jQuery.getJSON(url, [data], [callback])

参数: url:发送请求地址。

data:待发送 Key/value 参数。

callback:载入成功时回调函数


3.在<body>中创建元素,且进行显示

 <input type="text" value="" name="" />
 <input type="button" id="get_movies" value="获取电影列表"" />
  <div id="container">
    <!--用来展示图片的-->
    <div class="item">
      <img src=""  width="200px" height="200px"/>
      <p>人行天地间,忽如远行客</p>
    </div>
  </div>

4.对创建好的元素进行样式的设定

img{
    width: 200px;
    height: 200px;
    border: 1px solid red;
    float: left;
}
p{
    height: 200px;
    line-height: 200px;
    float: left;
    text-align: center;
    margin: 0px;
    padding: 0px;
}
.item{
    border: 1px solid blue;
    height: 204px;
    padding: 1px;
}
  1. 在页面上引人jquery开始写ajax
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="../jquery/jquery.js" ></script>
    <style type="text/css">
         img{
        width: 200px;
        height: 200px;
        border: 1px solid red;
        float: left;
      }
      p{
        height: 200px;
        line-height: 200px;
        float: left;
        text-align: center;
        margin: 0px;
        padding: 0px;
      }
      .item{
        border: 1px solid blue;
        height: 204px;
        padding: 1px;
      }
    </style>
    <script type="application/javascript">
      $(document).ready(function(){
        $("#get_movies").click(function (){
          alert("开始ajax");
          $.getJSON("movie_list.json",function(data)
          {
           alert(data.movies[0].img);  
           alert("data.movies.length:"+data.movies.length);  
             for (var i = 0; i < data.movies.length; i++)
             {
              var $img=$("<img src='../img/02.jpg' width='200px' height='200px' />")
                    var $p= $("<p></p>")
                    $img.attr("src",data.movies[i].img);//给img标签设置src属性值
                    $p.text(data.movies[i].tittle)//给p标签设置文本值
                    var $item=$("<div class='item'></div>")//创建一个div标签
                    $item.append($img).append($p)//将新创建的img标签和段落p标签追加到新创建的div标签中
                    $("#container").append($item)//将div追加到id值为container的div中
              }
          })                    
        })        
      })    
    </script>
  </head>
  <body>
       <!--
            作者:offline
            时间:2019-12-09
            描述:之所以写69行的目的是为了给学生演示一下,当开启ajax请求的时候69行中的文本值没有丢失,又一次验证ajax是异步局部刷新的
           -->
      <input type="text" value="" name="" />
    <input type="button" id="get_movies" value="获取电影列表"" />
    <div id="container">
      <!--用来展示图片的-->
      <div class="item">
        <img src=""  width="200px" height="200px"/>
        <p>人行天地间,忽如远行客</p>
      </div>
    </div>
  </body>
</html>

2.3.jquery$.post实现ajax请求

/*$.post(url,params,callback); 第一种:采用post方式提交,中文参数无需转码,在callback中如果要获取json字符串,还需转换一下(但是今天的例子是中没有的,稍后会再将json的)
示意代码:*/
alert("开始请求Ajax");
var gname=$("#gname").val();
alert("管理员姓名:"+gname);
var url="<%=request.getContextPath() %>/manager.do?method=queryAjax";
alert("请求的URl:"+url);
$.post(url,{manager_name:gname},function (data){
    alert("data:"+data);
    tianxie(data);
}); 

2.4.jquery$.getJSON加载本地json

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<script src="<%=request.getContextPath()%>/js/jQuery/jquery-1.4.4.js" type="text/javascript"></script>
<style type="text/css">
        img{
        width: 200px;
        height: 200px;
        border: 1px solid red;
        float: left;
      }
      p{
        height: 200px;
        line-height: 200px;
        float: left;
        text-align: center;
        margin: 0px;
        padding: 0px;
      }
      .item{
        border: 1px solid blue;
        height: 204px;
        padding: 1px;
      }
    </style>  
    <script type="application/javascript">
      $(document).ready(function(){
        $("#get_movies").click(function (){
              //获取本地json      回调函数的 返回数据
            $.getJSON("movie_list.json",function(data)
          {
           alert(data.movies[0].img);  
           alert("data.movies.length:"+data.movies.length);  
             for (var i = 0; i < data.movies.length; i++)
             {
              var $img=$("<img src='' width='200px' height='200px' />")
                    var $p= $("<p></p>")
                    $img.attr("src",data.movies[i].img);//给img标签设置src属性值
                    $p.text(data.movies[i].tittle)//给p标签设置文本值
                    var $item=$("<div class='item'></div>")//创建一个div标签
                    $item.append($img).append($p)//将新创建的img标签和段落p标签追加到新创建的div标签中
                    $("#container").append($item)//将div追加到id值为container的div中
              }
          })
        })
      })
    </script>
<body>
   <input type="text" value="" name="" />
    <input type="button" id="get_movies" value="获取电影列表"" />
    <div id="container">
      <!--用来展示图片的-->
      <div class="item">
        <img src=""  width="200px" height="200px"/>
        <p>人行天地间,忽如远行客</p>
      </div>
    </div>
</body>
</html> 

2.5.jquery解析后台servlet传来的数据

servlet

  /**
   * @desc 2.查询全部
   * @param request
   * @param response
   * @throws SQLException 
   * @throws ClassNotFoundException 
   * @throws IOException 
   * @throws ServletException 
   */
  private void query(HttpServletRequest request, HttpServletResponse response) throws ClassNotFoundException, SQLException, ServletException, IOException {
       List<Map<String, Object>> list=managerService.queryAll();
       String jsonStr=jsonOut(list);
      // request.setAttribute("list", list);
       //request.getRequestDispatcher("/manage/manager/list.jsp").forward(request, response);
       System.out.println("jsonStr:"+jsonStr);
       PrintWriter out = response.getWriter();
       out.write(jsonStr);
       out.flush();
       out.close();
  }
  /**
   * @desc  将数据转变为json格式
   * @param obj
   * @return
   * @throws IOException 
   * @throws JsonMappingException 
   * @throws JsonGenerationException 
   */
  private String jsonOut(Object obj) throws JsonGenerationException, JsonMappingException, IOException {
    //1.实例化JackSon包中的核心类
    ObjectMapper om=new ObjectMapper();
     //writeValue(参数,obj):直接将传入的对象序列化为json,并且返回给客户端
     //writeValueAsString(obj):将传入的对象序列化为json,返回给调用者
      String json = om.writeValueAsString(obj);
    return json;
  }

html

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<script src="<%=request.getContextPath()%>/js/jQuery/jquery-1.4.4.js" type="text/javascript"></script>
<style type="text/css">
        img{
        width: 200px;
        height: 200px;
        border: 1px solid red;
        float: left;
      }
      p{
        height: 200px;
        line-height: 200px;
        float: left;
        text-align: center;
        margin: 0px;
        padding: 0px;
      }
      .item{
        border: 1px solid blue;
        height: 204px;
        padding: 1px;
      }
    </style>  
    <script type="application/javascript">
      $(document).ready(function(){
        $("#get_movies").click(function (){
              //获取本地json      回调函数的 返回数据
            $.getJSON("movie_list.json",function(data)
          {
           alert(data.movies[0].img);  
           alert("data.movies.length:"+data.movies.length);  
             for (var i = 0; i < data.movies.length; i++)
             {
              var $img=$("<img src='' width='200px' height='200px' />")
                    var $p= $("<p></p>")
                    $img.attr("src",data.movies[i].img);//给img标签设置src属性值
                    $p.text(data.movies[i].tittle)//给p标签设置文本值
                    var $item=$("<div class='item'></div>")//创建一个div标签
                    $item.append($img).append($p)//将新创建的img标签和段落p标签追加到新创建的div标签中
                    $("#container").append($item)//将div追加到id值为container的div中
              }
          })
        })
      })
    </script>
<body>
   <input type="text" value="" name="" />
    <input type="button" id="get_movies" value="获取电影列表"" />
    <div id="container">
      <!--用来展示图片的-->
      <div class="item">
        <img src=""  width="200px" height="200px"/>
        <p>人行天地间,忽如远行客</p>
      </div>
    </div>
</body>
</html>

3.java数据转json格式

将对象转为json字符串时可以使用ObjectMapper中的两个方法:

writeValue(参数,obj):直接将传入的对象序列化为json,并且返回给客户端writeValueAsString(obj):将传入的对象序列化为json,返回给调用者

区别:

writeValueAsString(obj)

//1.实例化JackSon包中的核心类
    ObjectMapper om=new ObjectMapper();
Map<String,Object> map = new HashMap<String,Object>();
ObjectMapper mapper=new ObjectMapper();
String josn = mapper.writeValueAsString(map );
response.getWriter().write(josn);

writeValue(参数,obj)

//1.实例化JackSon包中的核心类
    ObjectMapper om=new ObjectMapper();
Map<String,Object> map = new HashMap<String,Object>();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(response.getOutputStream(),map);
目录
相关文章
|
数据采集 JSON 数据可视化
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
891 4
JSON数据解析实战:从嵌套结构到结构化表格
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
1012 37
|
设计模式 SQL Java
【再谈设计模式】解释器模式~语法的解析执行者
解释器模式定义了一种语言的语法表示,并定义一个解释器来解释该语言中的句子。它使用类来表示每个语法规则,并且通过递归调用这些类的方法来解释表达式。本质上,它将一个复杂的表达式分解为一系列简单的部分,然后按照特定的语法规则进行解析和执行。
425 8
|
人工智能 搜索推荐 API
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
cobalt 是一款开源的流媒体下载工具,支持全平台视频、音频和图片下载,提供纯净、简洁无广告的体验
3009 9
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
|
JSON 小程序 UED
微信小程序 app.json 配置文件解析与应用
本文介绍了微信小程序中 `app.json` 配置文件的详细
2604 12
|
JSON 缓存 API
解析电商商品详情API接口系列,json数据示例参考
电商商品详情API接口是电商平台的重要组成部分,提供了商品的详细信息,支持用户进行商品浏览和购买决策。通过合理的API设计和优化,可以提升系统性能和用户体验。希望本文的解析和示例能够为开发者提供参考,帮助构建高效、可靠的电商系统。
739 12
|
JSON JavaScript 前端开发
一次采集JSON解析错误的修复
两段采集来的JSON格式数据存在格式问题,直接使用PHP的`json_decode`会报错。解决思路包括:1) 手动格式化并逐行排查错误;2) 使用PHP-V8JS扩展在JavaScript环境中解析。具体方案一是通过正则表达式和字符串替换修复格式,方案二是利用V8Js引擎执行JS代码并返回JSON字符串,最终实现正确解析。 简介: 两段采集的JSON数据因掺杂JavaScript代码导致PHP解析失败。解决方案包括手动格式化修复和使用PHP-V8JS扩展在JavaScript环境中解析,确保JSON数据能被正确处理。
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
931 140
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1522 29
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
606 4

推荐镜像

更多
  • DNS