Blogger Information
Blog 23
fans 1
comment 0
visits 16934
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JS对象与JSON字符串互相转化2019年5月17日课后练习
布衣大汉的博客
Original
698 people have browsed it

1、将JS对象序列化为JSON字符串

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title>将JS对象序列化为JSON字符串</title>
</head>
<body>

<script>
    // 1.JS对象
    var user = {
        id: 1,
        username: 'admin',
        password: '123456',
        age: 24
    };

    // 序列化为JSON字符串
    var json1 = JSON.stringify(user);
    console.log(json1);
    console.log(typeof json1);

    // 2. js数组
    var arr1 = ['瞎子', '压缩', '小提莫'];
    var json2 = JSON.stringify(arr1);
    console.log(json2);

    // 3. 数组中也可以有对象等复合类型
    var attr3 = [
        {"name": "德玛西亚之力", "skill": "大宝剑"},
        {"name": "厄运小姐", "skill": "枪林弹雨"},
        {"name": "盲僧", "skill": "一库"},
        {"name": "快乐风男", "skill": "痛里呀尅通"}
    ];

    var json3 = JSON.stringify(attr3);
    console.log(json3);
    console.log(typeof json3);

    // 4.JSON.parse(),还可以将它还原成js对象
    var obj = JSON.parse(json3);
    console.log(obj);
    console.log(typeof obj);

</script>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

2、使用JSON验证表单数据

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用JSON验证表单数据</title>
</head>
<body>
<h3>用户登录</h3>
<form name="login" method="post" onsubmit="return false">
    <p>
        <label for="username">账号:</label>
        <input type="email" id="username" name="username" placeholder="example@gmail.com">
        <span style="color: red" id="error_email">*</span>
    </p>
    <p>
        <label for="password">密码: </label>
        <input type="password" id="password" name="password" placeholder="密码不少于6位">
        <span style="color: red" id="error_psw">*</span>
    </p>
    <p>
        <button id="submit" type="button">登录</button>
        <span id="result"></span>
    </p>
</form>

<script>
    // 获取必要的元素,以及提示信息的占位符元素
    var login = document.forms.namedItem('login');
    var submit = document.getElementById('submit');
    var error_email = document.getElementById('error_email');
    var error_psw = document.getElementById('error_psw');
    var result = document.getElementById('result');

    // 为提交按钮设置点击事件, 并分配一个事件响应函数(只需要名称即可)
    submit.addEventListener('click', checkUser, false);

    // 主函数: 定义提交事件函数, 内部会调用二个子函数,完成主要功能
    function checkUser() {
        // 1.数据非空验证
        var user = isEmpty(login, error_email, error_psw);

        // 2. Ajax异步验证
        // 如果非空验证返回false,说明验证失败, 就不必再到服务器进行Ajax验证了, 直接返回false
        // 否则就将需要验证的数据(对象字面量user)做为参数,调用异步验证器: verfiy()
        return user ? verfiy(user, result) : false;
    }


    // 非空验证函数
    function isEmpty(form, error1, error2) {
        // 获取表单控件中的内容,并清空前后空格
        var username = form.username.value.trim();
        var password = form.password.value.trim();

        // 先验证邮箱,再验证密码,并正确的设置焦点与返回值
        if (username.length === 0) {
            error1.innerText = '账号不能为空';
            login.username.focus();
            return  false;
        } else if (password.length === 0){
            error2.innerText = '密码不能为空';
            login.password.focus();
            return  false;
        }

        // 非空验证通过, 则返回账号与密码组成的对象字面量,方便后续代码调用
        return {
            username: username,
            password: password
        }
    }


    function verfiy(user, result) {
        //1.创建request对象
        var request = new XMLHttpRequest();

        //2.监听响应状态
        request.onreadystatechange = function(){
            if (request.readyState === 4) { // 准备就绪
                // console.log(request.responseText);
                // 设置验证提示
                result.innerHTML = request.responseText;
                // 验证通过的跳转功能, 需要使用JSON来实现

                // 根据返回的状态值确定要显示的提示内容
                var obj = JSON.parse(request.responseText);

                switch (obj.status) {
                    case 1:
                        result.style.color = 'red';
                        result.innerHTML = obj.message;
                        break;
                    case 2:
                        result.style.color = 'red';
                        result.innerHTML = obj.message;
                        break;
                    case 3:
                        result.style.color = 'green';
                        result.innerHTML = obj.message;
                        break;
                }
            }
            return false;
        };

        //3.设置请求参数
        request.open('post','admin/check2.php',true);

        //4. 设置头信息,将内容类型设置为表单提交方式(固定模板语法结构)
        request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

        //4.发送请求
        // 准备要提交的数据
        // 不再使用字符串拼装键值对的方式组装数据
        // var data = 'username=' + user.username + '&password=' + user.password;

        // 创建一个JS对象来封装要提交的需要验证的前端数据;
        var obj = {
            username: user.username,
            password: user.password
        };
        // console.log(obj);

        // 将JS对象转化为JSON字符串
        var data = 'user=' + JSON.stringify(obj);
        console.log(typeof data);

        request.send(data);
    }

    // input: 当用户修改错误数据时, 提示信息应该消失
    login.username.addEventListener('input', function (){
        error_email.innerText = ''; // 清除账号错误提示
        result.innerText = '';  // 清除服务器返回的验证提示
    }, false);
    login.password.addEventListener('input', function (){
        error_psw.innerText = '';  // 清除密码错误提示
        result.innerText = '';  // 清除服务器返回的验证提示
    }, false);

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

运行实例 »

点击 "运行实例" 按钮查看在线实例

实例

<?php

$user = $_POST['user'];

//  咱们以将期转换为数组为例进行演示
$arr = json_decode($user, true);

$email = $arr['username'];
$password = $arr['password'];

$emailList = ['admin@php.cn', 'admin@html.cn', 'admin@qq.com'];
$pwd = md5('123456');

if (!in_array($email, $emailList)) {
    // json_encode: 将php数组或数组转为json格式字符串
    echo json_encode(['status'=>1, 'message'=>'邮箱不正确']);

} else if (md5($password) !== $pwd) {
    echo json_encode(['status'=>2, 'message'=>'密码不正确']);
} else {
    echo json_encode(['status'=>3, 'message'=>'验证通过正在跳转']);

}

运行实例 »

点击 "运行实例" 按钮查看在线实例

3、对JS对象JSON序列化时进行过滤

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>对JS对象JSON序列化时进行过滤</title>
</head>
<body>

<script>
    var staff = {
        id: 'YYY01',
        name: '德玛西亚之力',
        salary: 888,
        isMarried: true
    };

    var jsonStr1 = JSON.stringify(staff);
    console.log(jsonStr1);

    // 仅允许序列化: id, name 二个字段,其它不输出
    var jsonStr2 = JSON.stringify(staff, ['id', 'name']);
    console.log(jsonStr2);

    // 可以使用回调参数, 即函数,来实现同样的功能
    // 将不允许序列化的字段,返回 undefined 即可
    var jsonStr3 = JSON.stringify(staff, function (key, value) {
        switch (key) {
            case 'salary':
                return undefined;
            case 'isMarried':
                return  undefined;
            default:
                return value;
        }
    });
    console.log(jsonStr3);

    var name = '疾风剑豪';

    var jsonStr4 = JSON.stringify(staff, function (key, value) {
        switch (key) {
            case 'salary':
                if (name === 'admin') {
                    return value;
                }
                return '无权查看';

            case 'isMarried':
                return undefined;

            default:
                return value;
        }
    });
    console.log(jsonStr4);

</script>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

4、将JSON字符串还原为JS对象时进行过滤

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>将JSON字符串还原为JS对象时进行过滤</title>
</head>
<body>

<script>
    var jsonStr = '{"id": "YYY01","name": "暗夜猎手", "salary": 888,"isMarried": true}';

    var staff1 = JSON.parse(jsonStr);
    console.log(staff1);

    // 遍历
    Object.keys(staff1).forEach(function (value) {
        console.log(staff1[value]);
    });

    var staff2 = JSON.parse(jsonStr, function (key, value) {
        return value;
    });
    console.log(staff2);

    var staff3 = JSON.parse(jsonStr, function (key, value) {
        if (key === 'salary'){
            return undefined;
        }
        return value;
    });
    console.log(staff3);
    // 注意: JSON.parse() 与 JSON.stringify()不同, 第二个参数不支持数组,只支持回调函数
</script>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments