Ajax介绍及基础应用(二)

四、JSON

一.介绍JSON

  • JSON:JavaScript(JS) Object(对象) Notation(表现方式)
  • 以JS对象的格式来约束前后端交互的字符串数据

二.JSO - JS对象

var obj = {
  uname:"zhangsan",
  uage:30,
  ugender:"男"
}

三.JSON规范

1.使用JSON表示单个对象

  1. 使用{}来表示一个对象
  2. {}中使用key:value来表示属性(数据)
  3. key必须使用""(双引号)引起来
  4. value如果是字符串也必须使用""(双引号)引起来
  5. 多个key:value使用,(逗号)来分隔
    • 示例:

      var obj = '{"uname":"zhangsan","uage":30,}';
      

2.使用JSON表示一组对象

  • 使用[]表示一组对象

  • 示例:

    var users = '[{"uname":"zhangsan","uage":30},{"uname":"lisi","uage":40}]';
    

四.前端中处理JSON

1.语法

作用:将后端传递过来的JSON格式字符串转换为JSON对象
var js对象 = JSON.parse(JSON串);
  • 示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>json - 前端中处理</title>
    </head>
    <body>
    <script src="/static/js/jquery-1.11.3.js"></script>
    <script>
        // 模拟一个JSON格式的字符串
        var jsonStr = '{"uname":"wang","uage":30}';
        // 通过JSON.parse()将jsonStr转换为JS对象
        var obj = JSON.parse(jsonStr);
        console.log("姓名:"+obj.uname);
        console.log("年龄:"+obj.uage);
    
        // 用JSON字符串来表示一组对象(uname,uage)
        // 将JSON字符串转换为JS对象/数组
        // 循环遍历数组,将每个人的信息输出在控制台上
        var users = '[{"uname":"zhangsan","uage":30},{"uname":"lisi","uage":40},{"uname":"wangwu","uage":34},{"uname":"jinlian","uage":30}]';
        var user = JSON.parse(users);
        for (var i = 0;i<user.length;i++){
            console.log("姓名:"+user[i].uname);
            console.log("年龄:"+user[i].uage);
        }
        console.log("使用jq循环遍历:");
    
        $(user).each(function (i,obj) {
            console.log("each姓名:"+obj.uname);
            console.log("each年龄:"+obj.uage);
        });
    </script>
    </body>
    </html>
    

五.后端中处理JSON

1.在Python中的处理 - dumps

  1. 允许将元祖,列表,字典转换成JSON字符串
  2. 元祖,列表,字典中可以是字符串,也可以是元祖,列表,字典
  3. Python中提供了json模块,json模块中提供dumps方法实现JSON字符串的转换

2.在Django中的处理 - serializers

  1. 使用Django中提供的序列化类来完成QuerySet(查询集,是从服务器url里获取到的查询内容)JSON字符串的转换

    • 语法示例:

      from django.core import serializers
      QuerySet_Name = models.py中的类名.objects.all()
      str = serializers.serialize('json',QuerySet_Name)
      return HttpResponse(str)
      

3.后端中处理JSON总体示例

# django_app_name/views.py

def json_server(request):
    # 1.通过字典来模拟单个对象
    dic = {'uname':'maria','uage':30,'ugender':'male'}
    jsonStr = json.dumps(dic)
    # return HttpResponse(jsonStr)

    # 2.通过列表+字典模拟多个对象
    users = [{'uname':'maria','uage':30,'ugender':'male'},{'uname':'wangwu','uage':33,'ugender':'male'},{'uname':'jinlian','uage':28,'ugender':'女'}]
    # return HttpResponse(json.dumps(users))

    # 3.读取User实体中所有的数据并转换成JSON格式的字符串
    users = User.objects.all()
    str = serializers.serialize('json',users)
    return HttpResponse(str)
<!-- templates/json_server.html -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>显示所有注册表</title>
    <script src="/static/js/common.js"></script>
    <script src="/static/js/jquery-1.11.3.js"></script>
    <script>
        $(function () {
            $("#show").click(function () {
                var xhr = createXhr();
                xhr.open('get','/users/json_server',true);
                xhr.onreadystatechange = function(){
                    if (xhr.readyState === 4 && xhr.status === 200){
                        var str = xhr.responseText;
                        console.log(str);
                        var obj = JSON.parse(str);
                        console.log(obj);
                        var html = "";
                        for (var i = 0;i<obj.length;i++){
                            html += "<tr>";
                            html += "<td>"+obj[i].pk+"</td>";
                            html += "<td>"+obj[i].fields.uname+"</td>";
                            html += "<td>"+obj[i].fields.upwd+"</td>";
                            html += "<td>"+obj[i].fields.nickname+"</td>";
                            html += "</tr>";
                        }
                        $("#content").html(html)
                    }
                };
                xhr.send();
            });
        });
    </script>
</head>
<body>
    <button id="show">显示</button>
    <table width="400px" border="1">
        <tr>
            <th>ID</th>
            <th>用户名</th>
            <th>密码</th>
            <th>昵称</th>
        </tr>
        <tbody id="content"></tbody>
    </table>
</body>
</html>

六.前端传递JSON数据给服务器端

1.前端:将数据封装成JS对象/数组

var params = {
  uname:"zhangsan",
  uage:30,
  ugender: "male",
}

2.前端:将JS对象转换成JSON格式的字符串

  • 方法:JSON.stringify()

  • 作用:将JS对象转换成JSON字符串

  • 示例:

    var jsonStr = JSON.stringify(params)
    

3.服务器端:接受响应数据

jsonStr = request.GET['xxxx']

4.服务器端:将JSON字符串转换为Python字典/列表

  • 方法:json.loads()

  • 作用:将JSON字符串转换成Python字典/列表

  • 示例:

    dic = json.loads(jsonStr)
    通过dic['key']取值
    
  • 字典遍历:

    def server04():
        dic = {"cname": "python基础", "teacher": "wangwu"}
        for key,value in dic.items():
            print(key,value) # cname python基础 teacher wangwu
        for i in dic.values():
            print(i) # python基础 wangwu
        for j in dic.keys():
            print(j) # cname teacher
        print(dic.keys()) # dict_keys(['cname', 'teacher'])
        print(dic.values()) # dict_values(['python基础', 'wangwu'])
        print(dic.items()) # dict_items([('cname', 'python基础'), ('teacher', 'wangwu')])
    server04()
    

5.前端传递JSON数据给服务器端总体示例

# django_app_name/views.py

def front_server(request):
    jsonStr = request.GET['params']
    # 通过json.loads()将jsonStr转换为Python字典
    dic = json.loads(jsonStr)
    print(dic,type(dic))
    msg = "姓名:%s,年龄:%s,性别:%s"%(dic['uname'],dic['uage'],dic['ugender'])
    return HttpResponse(msg)
<!-- templates/front_server.html -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>front_json</title>
    <script src="/static/js/common.js"></script>
    <script src="/static/js/jquery-1.11.3.js"></script>
    <script>
        $(function () {
            $("#btnJSON").click(function () {
                var xhr = createXhr();
                var params = {
                    uname:"zhangsan",
                    uage:30,
                    ugender:"male"
                };
                // 将params转换成JSON格式的字符串
                params = JSON.stringify(params);

                xhr.open('get','/users/front_server?params='+params,true);
                xhr.onreadystatechange = function () {
                    if (xhr.readyState === 4 && xhr.status === 200){
                        alert(xhr.responseText)
                    }
                };
                xhr.send(null);
            });
        });
    </script>
</head>
<body>
    <button id="btnJSON">发送JSON数据</button>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值