IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Json(1):基础知识 -> 正文阅读

[JavaScript知识库]Json(1):基础知识

  Json(JavaScript·Object·Notation)是一种轻量级、纯文本的用于数据存储、传递和交换的表示方法信息。
  ①JSON的语法简单灵活,衍生于 JavaScript 对象标记法语法:
  ●数据在名称/值对中
  ●数据由逗号分隔
  ●花括号容纳对象
  ●方括号容纳数组
  ②在 JSON 中,值必须是以下数据类型之一:
  字符串、数字、对象(JSON 对象)、数组、布尔、null
  JSON 文件的文件类型是 ".json",JSON 文本的 MIME 类型是 "application/json"
  ③它可以传输任何数据类型的数据。
  当数据在浏览器与服务器之间进行交换时,这些数据只能是文本。
  我们能够把任何 JavaScript 对象转换为 JSON,然后将 JSON 发送到服务器。我们也能把从服务器接收到的任何 JSON 转换为JavaScript 对象。以这样的方式,我们能够把数据作为 JavaScript 对象来处理,无需复杂的解析和转译。

  以实际的代码操作来学习。

  (一)单个对象

  先使用JavaScript来声明、赋值,然后输出。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Json学习</title>
    <script>
        // 声明和赋值
        var student={
            id:101,
            name:'小明',
            ChineseScore:81.5,
            MathScore:87,
            totalScore:function(){
                return this.ChineseScore+this.MathScore;
            },
        };
        //信息显示
        function showInfo(){
            document.write("  学号:"+student.id);
            document.write("  姓名:"+student.name);
            document.write("  语文:"+student.ChineseScore);
            document.write("  数学:"+student.MathScore);
            document.write("  总分:"+student.totalScore());
        };
    </script>
</head>
<body onload="showInfo()">
    
</body>
</html>

  输出结果:

  ?如果上面的对象转换成Json格式定义和输出:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Json学习</title>
    <script>
        // 声明和赋值
        var student={
            id:101,
            name:'小明',
            ChineseScore:81.5,
            MathScore:87,
            totalScore:function(){
                return this.ChineseScore+this.MathScore;
            },
        };
        //信息显示
        function showInfo(){
            var jsonStudent=JSON.stringify(student);
            document.write(jsonStudent);
        };
    </script>
</head>
<body onload="showInfo()">
    
</body>
</html>

  输出为:

  方法不见了,这意味着如果再转换为对象,totalScore没有了。

?  如果我们按照Json的格式来形成字符串,可以把方法放进去。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Json学习</title>
    <script>
        function showInfo(){
            //对象字符串
            var strJson='{"student":{"id":101,"name":"小明","ChineseScore":81.5,"MathScore":87,"totalScore":function(){return this.ChineseScore+this.MathScore;}} }';
            //转换为JavaScript对象
            var jsonObj=eval("("+strJson+")");
            document.write("  学号:"+jsonObj.student.id);
            document.write("  姓名:"+jsonObj.student.name);
            document.write("  语文:"+jsonObj.student.ChineseScore);
            document.write("  数学:"+jsonObj.student.MathScore);
            document.write("  总分:"+jsonObj.student.totalScore());
      };
    </script>
</head>
<body onload="showInfo()">
    
</body>
</html>

  输出结果:

  为什么eval要加大括号?

  因为eval可以处理表达式而不能处理语句块,加大括号强制将括号内的表达式转换为对象。

????????????var?strObj="{}";

????????????console.log(typeof?eval(strObj));//输出为underfined

????????????console.log(typeof?eval('('+strObj+')'));输出为Object

????????????console.log(typeof?JSON.parse(strObj));//输出为Object

  说明Json格式的严格要求,单个对象必须是

  '{"对象名":{"属性名":属性值,"属性名":属性值,"属性名":属性值,"函数名":函数内容}

  这样才能被eval正确解析。

  eval显然比JSON.parse强大得多。

  上面的转换如果用JSON.parse来进行则最后的totalScore也报错。

  (二)对象数组

  对象数组用的多,比如表格数据。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Json学习</title>
    <script>
        function showInfo(){
            //创建studentList对象
            var studentList=[
                            {id:101,name:'小明',chineseScore:81.5,mathScore:87,totalScore:function(){ return this.chineseScore+this.mathScore;}},
                            {id:102,name:'小黄',chineseScore:61,mathScore:47.5,totalScore:function(){ return this.chineseScore+this.mathScore;}},
                            {id:103,name:'小丽',chineseScore:89.5,mathScore:83,totalScore:function(){ return this.chineseScore+this.mathScore;}},
                            {id:104,name:'小宋',chineseScore:56,mathScore:97,totalScore:function(){ return this.chineseScore+this.mathScore;}},
                        ];
            //输出
            for(var i=0;i<studentList.length;i++){
                document.write("  学号:"+studentList[i].id);
                document.write("  姓名:"+studentList[i].name);
                document.write("  语文:"+studentList[i].chineseScore);
                document.write("  数学:"+studentList[i].mathScore);
                document.write("  总分:"+studentList[i].totalScore());
                document.write("<br>");
            }      
      };
    </script>
</head>
<body onload="showInfo()">
    
</body>
</html>

  输出:

?  也就是下面的代码:

            //将JavaScript对象转换为Json字符串
            var jsonStudent=JSON.stringify(studentList);
            document.write(jsonStudent);

  输出:

  同样totalScore不见了。

  那我们按照严格的规范来写。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Json学习</title>
    <script>
        function showInfo(){
            //'{"对象名":[内容]}'
            var strJson='{"studentList":[{"id":101,"name":"小明",ChineseScore:81.5,MathScore:87,"totalScore":function(){ return this.ChineseScore+this.MathScore; }},{"id":102,"name":"小黄",ChineseScore:61,MathScore:47.5,"totalScore":function(){ return this.ChineseScore+this.MathScore; }},{"id":103,"name":"小丽",ChineseScore:89.5,MathScore:83,"totalScore":function(){ return this.ChineseScore+this.MathScore; }},]}';
            // // //将字符串转换为Json对象
            var jsonObj=eval("("+strJson+")");
            for(var i=0;i<jsonObj.studentList.length;i++){
                document.write(" 学号:"+jsonObj.studentList[i]["id"]);
                document.write(" 姓名:"+jsonObj.studentList[i]["name"]);
                document.write(" 语文:"+jsonObj.studentList[i]["ChineseScore"]);
                document.write(" 数学:"+jsonObj.studentList[i]["MathScore"]);
                document.write(" 总分:"+jsonObj.studentList[i].totalScore());
                document.write("<br>");
            };
        };
    </script>
</head>
<body onload="showInfo()">
    
</body>
</html>

  输出:

?  说明对象数组转换有严格的书写要求,即'{"对象名":[内容]}',访问可以使用两种方法:

  ●对象数组名[索引值].属性名

  ●对象数组名[索引值]["属性名"]

  上面使用JSON.parse也报错,因为有方法函数,JSON.parse解析严格得多,按规范来写。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Json学习</title>
    <script>
        function showInfo(){
            //'{"对象名":[内容]}'
            var strJson='{"studentList":[{"id":101,"name":"小明","ChineseScore":81.5,"MathScore":87},{"id":102,"name":"小黄","ChineseScore":61,"MathScore":47.5},{"id":103,"name":"小丽","ChineseScore":89.5,"MathScore":83}]}';
            // // //将字符串转换为Json对象
            // var jsonObj=eval("("+strJson+")");
            var jsonObj=JSON.parse(strJson);
            for(var i=0;i<jsonObj.studentList.length;i++){
                document.write(" 学号:"+jsonObj.studentList[1].id);
                document.write(" 姓名:"+jsonObj.studentList[1].name);
                document.write(" 语文:"+jsonObj.studentList[1].ChineseScore);
                document.write(" 数学:"+jsonObj.studentList[1].MathScore);
                document.write("<br>");
            }
        };
    </script>
</head>
<body onload="showInfo()">
    
</body>
</html>

  规范的写法,则eval和JSON.parse都可以正确解析。但一般建议是使用JSON.parse。毕竟使用eval有不安全的因素在里面。

  写程序时一定多加测试,以防止意外的情况发生。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-18 17:18:34  更:2021-10-18 17:19:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 22:47:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码