JSON 在JavaScript 中的应用及自己的理解

【对象和json】
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON 是存储和交换文本信息的语法。类似 XML。
JSON是一种数据格式,不是一种编程语言。在json中没有注释。json代表了一个数据传输格式。
一、json的语法可以表示以下三种类型的值:(数据结构)
(1)简单值:是最简单的数据形式,可以是字符串、数值、布尔值、null。json不支持javascript中的特殊值undefined。注意:json中的字符串必须使用双引号括起来。
(2)对象:json中的对象与javascript字面量稍微有一些不同,但是,json中的对象要求给属性加引号(双引号),其次没有末尾的分号(因为他不是javascript语句),它是使用花括号{}包含的键值对结构。

例如:

//在javascript中的对象字面量可以是:
         var object = {
               name: "bob",
               age: 29
              };
         //而在json中表示上述对象的方式如下:
              {
                  "name": "bob",
                  "age": 39
              }

(3)数组:数组是json的第二种复杂数据类型。即用“[]”起始来表示,用逗号来分隔元素。json数组也没有变量和分号。把数组和对象组合起来可以构成更复杂的数据集合。

二、json的解析与序列化
json可以把json数据结构解析为有用的javascript对象。是web开发中数据交换的事实标准。

(1)json对象:json是javascript语法的子集,因此eval()函数可以解析、解释并返回javascript对象和数组,但是存在风险。
json对象有两个方法:stringify()和parse()。在最简单的情况下,这两个方法分别把javascript对象序列化为json字符串,把json字符串解析为原生javascript值。
(2)序列化选项
JSON.stringify()除了要序列化的javascript外,还可以接受另外两个参数,用于指定用不同方式序列化javascript对象。第一个参数是一个过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保持缩进。
1、过滤结果:如果过滤器参数是数组,那么JSON.stringify()的结果中将只包含数组中列出的属性。

var book = {
              "title": "javascript",
              "author": [
                       "bob"
              ],
              edition: 3,
            year:2001
          };

          var jsontext = JSON.stringify(book, ["title", "edition"]);
          //保存在json中的字符串为:title,edition和他们的属性值。

如果第二个参数是函数,传入的函数接受两个参数,属性名和属性值。如果函数返回了undefined,那么相应的属性会被忽略。(通过返回undefined可以删除一个属性)。

 var book = {
              "title": "javascript",
              "author": [
                       "bob"
              ],
              edition: 3,
            year:2001
          };

          var jsontext = JSON.stringify(book, function(key, value){
              switch(key){
                  case "author":
                    return value:join(",")
                  case "year":
                    return 3000;
                case "edition" :
                  return undefined;

                default:
                  return value;
              }
          });
          //返回值就为title、author、year及属性值。

2、字符串缩进
json的第三个参数用于控制结果中的缩进和空白符,缩进字符可以是短画线之类的任意字符。缩进字符最长不超过10个字符。
3、toJSON()方法:满足自定义序列化的需求。在这种情况下可以给对象定义toJSON()方法,返回自身的json数据格式。

var book = {
              "title": "javascript",
              "author": [
                       "bob"
              ],
              edition: 3,
                        year:2001,
                        toJSON: function(){
                                return this.title;
                       }
          };
                var jsontext = JSON.stringify(book);

假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下:
——如果存在toJSON()方法而且能通过他取得有效的值,则调用该方法,否则,返沪对象本身。
——如果提供了第二个参数,应用这个函数过滤器。传入函数的过滤器的值是第一步返回的值。
——对第二步返回的值进行相应的序列化。
——如果提供了第三个参数,执行相应的格式。

三、解析选项
JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将在每一个键值对儿上调用。这个函数被称为还原函数。该函数接收两个参数,一个键和一个值,返回一个值。如果还原函数返回undefined,则表示从结果中删除相应的键;返回其他值,则将该值插入到结果中。

时间: 2024-07-29 05:59:45

JSON 在JavaScript 中的应用及自己的理解的相关文章

关于JavaScript中没有块级作用域的理解

引用<JavaScript权威指南>(第六版)中的举例 代码段1: var scope="global"; function f(){ console.log(scope); scope="local" console.log(scope); } f(); 会输出什么? 答案:undefined  global 代码段2: var scope="global"; function f(){ var scope; console.log

JavaScript中对null和undefined的理解

前沿: 今天工作中遇到了监视一个变量是undefined,结果判断写的是==null 返回值是true,这个结果引起了我对这两个东西的兴趣. 查询了相关的文章理解并测试了.发现有以下特点: 1.广义上来讲JavaScript中null和undefined是相等的,即null==undefined 返回值是true 2.狭义上来讲JavaScript中null和undefined是不相等的,即null===undefined 返回值是false 3.值得说的是null和undefined在if判断

在javascript中对于this指向的再次理解

总所周知,function () {}函数体内的this对象指向的是调用该函数的对象,那么我们看一下这个例子 <script> var length = 3; function fn () { console.log(this.length) } fn(); </script> 函数调用是在最外层发生的,那么由于全局对象this的存在,那么函数体内的this指向的就是window对象. 在浏览器环境下,全局变量和window对象的属性是等价的,所以定义了length全局变量就相当于

javascript中的call()和apply()的理解

在学习javascript的时候,对于call()和apply()的用法总是难以理解,相信很多小伙伴和我又一样的想法.最近在看犀牛书,对这两个函数又狠狠地理解了一下,总算有些眉目,了解了两个函数的基本用法,现在和小伙伴们分享一下,说的不对还望纠正. 一.call 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]])     定义:调用一个对象的一个方法,以另一个对象替换当前对象. 看完语法和定义还是难以理解,call函数可以接受若干个参数,其中第一个参数

JavaScript中this指针指向的彻底理解

this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 这一点与函数中自由变量Action-varibal不同 1 var object = { 2 name : 'The Kite Runner', 3 obj : { 4 name : 'childProperty', 5 fn : function(x, y){ 6 var result = x + y; 7 console.log('this-context'

javascript 中对this关键字的一些理解

var self = this 可能会觉得奇怪为什么我会定义一个_self的变量, 因为在js里,this不用对于其他的对象语言,他的解析过程与运行过程中this会改变的.这里简单说说js里this的定义,若有需要我可以开多一篇. 定义:this是包含它的函数作为方法被调用时所属的对象. 特征:this的环境可以随着函数被赋值给不同的对象而改变!

JavaScript中function 之return false的理解(实例代码)

1.司空见惯代码,在某一dom节点上注册事件方法 $("#btnResponse").click(Login); $("#txtCode").keydown(ReturnKey); 2.非常正常的Login function,只是里面用了swal插件 代码执行效果就是我要的,点击btnResponse,当满足触发条件,弹出swal提示框,非常好. function Login(e) { var loginUserId = $("#txtUserno&quo

谈JSON在Ajax中的使用

JSON是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解析和生成.AJAX是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术.之前也曾介绍过在PHP语言中使用JSON的文章,大家也可以看看,供参考. 虽然XML在Ajax运行中具有举足轻重的地位,但JavaScript开发人员很快就对它失去了兴趣.在JavaScript中操作XML存在严重的跨浏览器问题,而且从XML结构中提取数据也需要涉及遍历DOM文档,而这些操作都需要编写大量的代码.Douglas Crockford

理解javascript中的prototype

以前一直对javascript中的prototype不是很理解,今天在阅读了<javascript高级程序设计之后>终于理解了其中的prototype.来简单的总结一下从书中学习到的内容. 我们都知道在创建了一个function之后,这个function就具有了prototype这样的一个属性,利用这个prototype我们可以做很多的事情,其中我们经常用到的一点就是利用它来当做构造函数,因此,本文重要从function作为构造函数的角度来说明一下prototype. 其实javascript