zoukankan      html  css  js  c++  java
  • JSON学习笔记

    一JSON介绍

    JSON:JavaScript Object Notation

        JS           对象    表现方式

    以JS对象的格式来约束前后端交互的字符串数据

    二JSO-JS对象

    使用 JS 对象表示一个人的信息,包含如下属性:

    姓名:wangwc

    年龄:30

    身高:180

    体重:180

    var obj = {

      name:"wangwc",

      age:30,

      height:180,

      weight:180

    }

    console.log("姓名:"+obj.name);

    三JSON规范

    1.使用JSON表示单个对象

      使用 {} 表示一个对象

      在 {} 中使用key:value来表示属性(数据)

      key必须使用""引起来

      value如果是字符串的话,也必须使用""引起来

      多对 key:value之间使用 , 分隔

      示例:var obj = '{"name":"wangwc","age":30}';

    2.使用JSON表示多个对象

      使用 [] 来表示一组对象

      示例:使用JSON表示2个人的信息

        var users = '[{"name":"wangwc","age":30},{"name":"weimz","age":40}]';

    四前端中处理JSON

    将得到的JSON串转换成JS对象/数组

    var js对象 = JSON.parse(JSON串);

    #在前端中处理JSON格式字符串
    
    url(r'^json/$', views.json_views),
    # -----------------
    
    def json_views(request):
      return render(request, 'json.html')
    路由/视图配置文件
    //file:json.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <script src="/static/jquery-1.11.3.js"></script>
      <script>
        $(function(){
          $("#btnJSON").click(function(){
            //1.模拟一个JSON字符串
            var flight = '{"flightNO":"NH980","from":"PEK","to":"KIX","time":"14:20"}';
            //2.通过JSON.parse()将JSON串转换成JS对象
            var obj = JSON.parse(flight);
            //console.log(obj);
            //3.解析对象
            console.log("航班号:"+obj.flightNO);
            console.log("出发:"+obj.from);
            console.log("到达:"+obj.to);
            console.log("时间:"+obj.time);
          });
          $("#btnJSONArr").click(function(){
            var str = '[{"flightNO":"NH980","from":"PEK","to":"KIX","time":"14:20"},{"flightNO":"NH979","from":"KIX","to":"PEK","time":"09:20"}]';
            var arr = JSON.parse(str);
            $(arr).each(function(i,obj){
              console.log("下标为"+i+"的元素");
              console.log("航班号:"+obj.flightNO);
              console.log("出发:"+obj.from);
              console.log("到达:"+obj.to);
              console.log("时间:"+obj.time);
            });   
          });
        });
      </script>
    </head>
    <body>
      <button id="btnJSON">JSON串->JS对象</button>
      <button id="btnJSONArr">JSON串->JS数组</button>
    </body>
    </html>
    json.html
    #-------显示结果---------
    
    #JSON串->JS对象 显示结果
    航班号:NH980
    出发:PEK
    到达:KIX
    时间:14:20
    
    #JSON串->JS数组 显示结果    
    下标为0的元素
    航班号:NH980
    出发:PEK
    到达:KIX
    时间:14:20
    下标为1的元素
    航班号:NH979
    出发:KIX
    到达:PEK
    时间:09:20
    显示结果

    五服务器端的JSON处理

      1.在Python中的处理

        1.允许将 元组,列表,字典 转换成JSON串

        2.元组,字典,列表中的内容必须是

          字符串,数字

          元组,列表,字典

        python中提供了json模块,json模块中提供dumps方法实现json串的转换

    # 在服务器端处理JSON格式字符串
    
    url(r'^server-json/$', views.server_json),
    
    #------------------------
    
    import json
    # ====服务器端中处理JSON====
    def server_json(requset):
      # 1.使用字典表示JSON数据
      dic = {
        'course': 'Ajax',
        'duration': 3,
        'place': 'BJ',
      }
      # 将dic通过json.dumps转换成JSON格式的字符串
      jsonStr = json.dumps(dic)
      # return HttpResponse(jsonStr)
      # 2. 使用列表表示多个JSON数据(列表中封装字典)
      list = [
        {
          'course': 'Ajax',
          'duration': 3,
          'place': 'BJ',
        },
        {
          'course': 'WEB',
          'duration': 3,
          'place': 'SH',
        },
        {
          'course': 'Python',
          'duration': 3,
          'place': 'CD',
        }
      ]
      jsonList = json.dumps(list)
      return HttpResponse(jsonStr + jsonList)
    路由/视图配置文件
    #--------------显示结果------------------
    
    {"course": "Ajax", "duration": 3, "place": "BJ"}
    
    [{"course": "Ajax", "duration": 3, "place": "BJ"}, {"course": "WEB", "duration": 3, "place": "SH"}, {"course": "Python", "duration": 3, "place": "CD"}]
    显示结果

      2.在Django中的处理

        使用Django中提供的序列化模块来完成QuerySet到JSON串的转换

        from django.core import serializers

        jsonStr = serializers.serialize('json',QuerySet)

      练习1:在服务器端中,读取Users表中的数据再转换成JSON串

    #在服务器端中,读取数据库Users表中的数据,再转换成JSON串
    
    url(r'^json-users/$', views.json_users_view),
    
    #--------------------
    
    from django.core import serializers
    def json_users_view(request):
      users = Users.objects.all()
      # jsonUsers = json.dumps(users)
      # QuerySet不支持json.dumps转换
      jsonUser = serializers.serialize('json', users)
      return HttpResponse(jsonUser)
    路由/视图配置文件
    #-------------显示结果-----------
    [
        {"model": "demo.users", "pk": 1, "fields": {"uname": "123", "upwd": "123", "uemail": "123", "nickname": "123"}}, 
        {"model": "demo.users", "pk": 26, "fields": {"uname": "11", "upwd": "11", "uemail": "11", "nickname": "11"}}, 
        {"model": "demo.users", "pk": 27, "fields": {"uname": "11", "upwd": "1", "uemail": "1", "nickname": "1"}}, 
        {"model": "demo.users", "pk": 28, "fields": {"uname": "11", "upwd": "1", "uemail": "1", "nickname": "1"}}, 
        {"model": "demo.users", "pk": 29, "fields": {"uname": "1", "upwd": "1", "uemail": "1", "nickname": "1"}}
    ]
    显示结果

      练习2:读取Users信息并显示在网页上(使用JSON)

    # 读取Users信息并显示在网页上(使用JSON)
    
    url(r'^json-users/$', views.json_users_view),
    url(r'^server-json-users/$', views.server_json_users_view),
    
    #-------------------------
    
    from django.core import serializers
    
    def json_users_view(reuqest):
      return render(reuqest, 'json-users.html')
    
    def server_json_users_view(request):
      users = Users.objects.all()
      jsonusers = serializers.serialize('json', users)
      return HttpResponse(jsonusers)
    路由/视图配置文件
    //file:json-users.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <script src="/static/common.js"></script>
      <script src="/static/jquery-1.11.3.js"></script>
      <script>
        $(function(){
          $("#btnShow").click(function(){
            var xhr = createXhr();
            xhr.open("get","/demo/server-json-users",true);
            xhr.onreadystatechange = function(){
              if(xhr.readyState==4 && xhr.status==200){
                //接收响应数据并转换成JS数组
                var arr = JSON.parse(xhr.responseText);
                var html = "";
                $(arr).each(function(i,obj){
                  html+="<tr>";
                   html+="<td>"+obj.pk+"</td>";
                   html+="<td>"+obj.fields.uname+"</td>";
                   html+="<td>"+obj.fields.upwd+"</td>";
                   html+="<td>"+obj.fields.uemail+"</td>";
                   html+="<td>"+obj.fields.nickname+"</td>";
                  html+="</tr>";
                });
                $("#content").html(html);
              }
            }
            xhr.send(null);
          });
        });
      </script>
    </head>
    <body>
      <button id="btnShow">显示</button>
      <table width="500" border="1">
        <thead>
          <tr>
            <th>ID</th>
            <th>用户名</th>
            <th>密码</th>
            <th>邮箱</th>
            <th>昵称</th>
          </tr>
        </thead>
        <tbody id="content"></tbody>
      </table>
    </body>
    </html>
    json-users.html

    六前端中将JS对象转换成JSON串

      方法:JSON.stringify(jsObj)

      作用:将jsObj转换成JSON串

    七服务器端中将JSON串转换为字典/列表

      方法:json.loads(jsonStr)

    #1.前端中将JS对象转换成JSON串
    url(r'^front-json/$', views.front_view),
    #----------------------------
    def front_view(request):
      return render(request, 'front-json.html')
    #-----------显示结果-----------
    转换后的值为:{"uname":"wang","uage":30,"ugender":"unknown"}
    
    #================================================    
    
    #2.服务器端中将JSON串转换为字典/列表
    url(r'^server-json/$', views.server_json_view),
    #------------------
    def server_json_view(request):
      jsonStr = '{"uname":"wang","uage":30,"ugender":"男"}'
      # 通过json.loads() 将jsonStr转换成python字典
      dic = json.loads(jsonStr)
      s = "姓名:%s,年龄:%s,性别:%s" % (dic['uname'], dic['uage'], dic['ugender'])
      return HttpResponse(s)
    #-----------显示结果----------------
    姓名:wang,年龄:30,性别:男
    路由/视图配置文件
    //file:front-json.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <script src="/static/jquery-1.11.3.js"></script>
      <script>
        $(function(){
          $("#btnJSON").click(function(){
            var obj = {
              uname:'wang',
              uage:30,
              ugender:'unknown'
            }
            //通过JSON.stringify()将obj转换成JSON串
            var str = JSON.stringify(obj);
            console.log("转换后的值为:"+str);
          });
        })
      </script>
    </head>
    <body>
      <button id="btnJSON">JS对象->JSON串</button>
    </body>
    </html>
    front-json.html

    练习:通过JSON完成注册操作

    # 通过JSON完成注册操作
    url(r'^register-json/$', views.register_json_view),
    url(r'^server-register-json/$', views.server_register_json_view),
    # ====12.通过JSON完成注册操作====
    def register_json_view(request):
      return render(request, 'register-json.html')
    
    def server_register_json_view(request):
      jsonuser = request.GET['params']
      # 将jsonuser转换成Python字典
      user = json.loads(jsonuser)
      print('1111')
      try:
        Users.objects.create(uname=user['uname'],
                             upwd=user['upwd'],
                             uemail=user['uemail'],
                             nickname=user['nickname'])
        return HttpResponse('注册成功')
      except Exception as e:
        print(e)
        return HttpResponse('注册失败')
    路由/视图配置文件
    //file:register-json.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <script src="/static/common.js"></script>
      <script src="/static/jquery-1.11.3.js"></script>
      <script>
        $(function(){
          $("#btnReg").click(function(){
            var xhr = createXhr();
            var params = {
              uname:$("#uname").val(),
              upwd:$("#upwd").val(),
              uemail:$("#uemail").val(),
              nickname:$("#nickname").val()
            }
            //将params转换为JSON串
            var str = JSON.stringify(params);
            xhr.open("get","/demo/server-register-json?params="+str,true);       
            xhr.onreadystatechange = function(){
              if(xhr.readyState==4 && xhr.status==200){
                alert(xhr.responseText);
              }
            }
            xhr.send(null);
          });
        })
      </script>
    </head>
    <body>
        <p>
          用户名称:<input type="text" id="uname">
        </p>
        <p>
          用户密码:<input type="password" id="upwd">
        </p>
        <p>
          电子邮箱:<input type="email" id="uemail">
        </p>
        <p>
          用户昵称: <input type="text" id="nickname">
        </p>
        <p>
          <input type="button" value="注册" id="btnReg">
        </p>
    </body>
    </html>
    register-json.html

    八JQ对AJAX的支持

    1.$obj.load()

      语法:$obj.load(url,data,callback)

        url:请求地址

        data:请求参数

        callback:响应成功后的回调

      作用:加载远程地址的内容到$obj中

      用法:

        1.data:请求参数[可选],如果没有参数则使用get方式

          1.通过字符串传参

            "key1=value1&key2=value2"

            注:此种传参会使用get方式发送请求
          
    2.通过JS对象传参
            {
              key1:"value1",
              key2:"value2"
            }
            注:此种传参会使用post方式发送请求
        
    2.callback:响应成功后的回调函数[可选]
          function(resText){
            resText:表示响应回来的数据
          }

    演示jquery中的$obj.load() 的作用

    #演示jquery中的$obj.load() 的作用
    url(r'^head/$',views.head_view),
    url(r'^index/$',views.index_view),
    #----------------------
    def head_view(request):
      return render(request, 'hand.html')
    # 将index页面的内容加载到head页面中
    def index_view(request):
      return render(request, 'index.html')
    路由/配置文件
    //file:head.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <style>
        #nav li{
          float:left;
          width:100px;
          height:30px;
          line-height:30px;
          background:red;
          text-align:center;
          color:#fff;
          font-weight:bold;
          font-size:16px;
        }
        #nav{
          list-style:none;
        }
      </style>
    </head>
    <body>
      <h1>北京欢迎您... ...</h1>
      <ul id="nav">
        <li>首页</li>
        <li>名胜古迹</li>
        <li>美食</li>
        <li>民俗风情</li>
      </ul>
    </body>
    </html>>
    head.html
    //file:index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <script src="/static/jquery-1.11.3.js"></script>
      <script>
        $(function(){
    
          //加载 /demo/head 页面到#top中
          $("#top").load("/demo/head",function(resText){
            console.log(resText);
            window.setTimeout(function(){
              $("#top").hide(5000);
            },5000);
          });
        })
      </script>
    </head>
    <body>
      <div id="top"></div>
      <h1>网页主体内容</h1>
      <h1>网页底部内容</h1>
    </body>
    </html>
    index.html

    2.$.get()

      作用:通过get方式异步的向远程地址发送请求

      语法:$.get(url,data,callback,type)

        1.url:请求地址

        2.data:请求参数[可选]

          1.使用字符串

          2.使用JS对象

        3.callback:响应成功后的回调函数[可选]

          function(resText){

          }

        4.type:响应回来的数据的格式[可选]

         取值如下:

          1.html:响应回来的文本当成html文本处理

          2.text:响应回来的文本当成普通文本处理

          3.script:响应回来的文本当JS脚本执行

          4.json:响应回来的文本是JSON格式,会直接转换成JS对象/数组

    1.演示jquery中的$.get()的作用

    # 演示jquery中的$.get()的作用
    url(r'^jq-get/$',views.jq_get_view),
    url(r'^server-json-users/$', views.server_json_users_view),
    # -------------------------
    def jq_get_view(request):
      return render(request, 'jq-get.html')
    
    def server_json_users_view(request):
      users = Users.objects.all()
      jsonusers = serializers.serialize('json', users)
      return HttpResponse(jsonusers)
    #-------显示结果-----------
    姓名:123
    昵称:123
    ==========================
    姓名:11
    昵称:11
    ==========================
    路由/视图配置文件
    file:jq-get.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <script src="/static/jquery-1.11.3.js"></script>
      <script>
        $(function(){
          $("#btnShow").click(function(){
            $.get("/demo/server-json-users",function(resText){
              //业务处理,由于type的类型是json所以resText直接当成JS对象去处理
              $(resText).each(function(i,obj){
                console.log("姓名:"+obj.fields.uname);
                console.log("昵称:"+obj.fields.nickname);
                console.log("==========================");
              });
            },'json');
          });
        })
      </script>
    </head>
    <body>
      <button id="btnShow">显示Users</button>
    </body>
    </html>
    jq-get.html

    2.通过$.get()完成搜索建议

    # 通过$.get()完成搜索建议
    url(r'^search/$', views.search_view),
    url(r'^server-search/$', views.server_search_view),
    # -------------------------
    def search_view(request):
      return render(request, 'search.html')
    
    def server_search_view(request):
      # 1.接收前端传递过来的参数 -kw
      kw = request.GET['kw']
      # 2.查询User数据库中uname列中kw的信息
      users = Users.objects.filter(uname__contains=kw)
      # 3.将uname封装成列表在转换成JSON串相应
      uList = []
      if users:
        for u in users:
          uList.append(u.uname)
      return HttpResponse(json.dumps(uList))
    路由/视图配置文件
    //file:search.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <style>
        #main{
          position:relative;
        }
        #show{
          width:300px;
          min-height:150px;
          border:1px solid #000;
          background:#fff;
          position:absolute;
          left:72px;
          top:30px;
          display:none;
        }
      </style>
      <script src="/static/jquery-1.11.3.js"></script>
      <script>
        $(function(){
          $("#uname").keyup(function(){
            //判断文本框的值去掉空格后是否为空,不为空发送ajax请求
            if(this.value.trim().length == 0){
              $("#show").html("");//清空#show里的内容
              $("#show").css("display","none");//隐藏#show
            }else{
              $.get("/demo/server-search","kw="+this.value,function(resText){
                if(resText.length == 0){
                  $("#show").html("");//清空#show里的内容
                  $("#show").css("display","none");//隐藏#show
                }else{
                  //清空原有的内容
                  $("#show").html("");
                  $(resText).each(function(i,obj){
                    $("#show").css("display","block");//显示
                    var $p = $("<p>"+obj+"</p>");
                    $("#show").append($p);
                  });
                }
              },'json');
            }
          });
        })
      </script>
    </head>
    <body>
      <div id="main">
        用户名称: <input type="text" id="uname">
        <button>搜索</button>
        <!-- 提示框:绝对定位的,相对于main实现位置的摆放 -->
        <div id="show"></div>
      </div>
    </body>
    </html>
    search.html

    3.$.post()

      语法:$.post(url,data,callback,type)

    4.$.ajax()

      作用:自定义所有的ajax参数

      语法: $.ajax({AJAX的参数对象})

      AJAX的参数对象:

        1. url : 请求的地址

        2. data : 请求到服务器端的参数

          1.字符串 : "key1=value1&key2=value2"

          2.JS对象: {key1:"value1",key2:"value2"}

        3.type : 请求方式 'get' 或 'post'

        4.dataType : 响应回来的数据的格式

          json,html,text,script

        5.async : 是否采用异步的方式发送请求

          true:异步(默认值)

          false:同步

        6.success:响应成功后的回调函数

          function(resText){

            resText表示的是响应回来的数据

          }

        7.error:请求或响应失败时的回调函数

          function(){

          }

    通过$.ajax() 完成自定义的ajax请求

    #通过$.ajax() 完成自定义的ajax请求
    url(r'^jq-ajax/$',views.jq_ajax_view),
    url(r'^server-json-users/$', views.server_jsonusers),
    #--------------------------
    def jq_ajax_view(request):
      return render(request,'jq-ajax.html')
    def server_json_users(request):
      users = Users.objects.all()
      jsonusers = serializers.serialize('json', users)
      return HttpResponse(jsonusers)
    #------------显示结果----------------
    用户名:123
    邮箱:123
    用户名:11
    邮箱:11
    用户名:11
    路由/视图配置文件
    //file:jq-ajax.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <script src="/static/jquery-1.11.3.js"></script>
      <script>
        $(function(){
          $("#btnAjax").click(function(){
            $.ajax({
              url:"/demo/server-json-users",
              type:"get",
              dataType:"json",
              async:true,
              success:function(resText){
                $(resText).each(function(i,obj){
                  console.log("用户名:"+obj.fields.uname);
                  console.log("邮箱:"+obj.fields.uemail);
                });
              }
            });
          });
        });
      </script>
    </head>
    <body>
      <button id="btnAjax">使用$.ajax()请求数据</button>
    </body>
    </html>
    jq-ajax.html
  • 相关阅读:
    Oracle Drop表并未直接删除 drop table xx purge
    Notepad++使用
    Python使用MySQL数据库
    考驾照科目二科目三要点记录
    Linux中权限(r、w、x)对于目录与文件的意义
    linux之expr命令
    linux下scp
    数字货币和区块链联系
    网站
    关于linux 编程
  • 原文地址:https://www.cnblogs.com/maplethefox/p/11246957.html
Copyright © 2011-2022 走看看