【对象和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,则表示从结果中删除相应的键;返回其他值,则将该值插入到结果中。

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

  1. JavaScript中对null和undefined的理解

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

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

    总所周知,function () {}函数体内的this对象指向的是调用该函数的对象,那么我们看一下这个例子 <script> var length = 3; function fn () ...

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

    this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 这一点与函数中自由变量Action-varibal不同 var ...

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

    var self = this 可能会觉得奇怪为什么我会定义一个_self的变量, 因为在js里,this不用对于其他的对象语言,他的解析过程与运行过程中this会改变的.这里简单说说js里this的 ...

  5. javascript中的prototype和__proto__的理解

    在工作中有时候会看到prototype和__proto__这两个属性,对这两个属性我一直比较蒙圈,但是我通过查阅相关资料,决定做一下总结加深自己的理解,写得不对的地方还请各位大神指出. 跟__prot ...

  6. 对JavaScript中原型及原型链的理解

    什么是原型:  1,我们所创建的每一个函数,解析器都会向该函数对象添加一个属性prototype,这个属性指向一个对象,这个对象就是我们所谓的原型对象 2,如果我们将函数作为普通函数调用时,proto ...

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

    1.司空见惯代码,在某一dom节点上注册事件方法 $("#btnResponse").click(Login); $("#txtCode").keydown(R ...

  8. 谈JSON在Ajax中的使用

    JSON是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解析和生成.AJAX是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术.之前也曾介绍过在PHP语言中使用JSON的文章, ...

  9. 难道这就是JavaScript中的"闭包"

    其实对于JavaScript中的"闭包"还没真正理解,这次在实际Coding中似乎遇到了"闭包"的问题,仅此摘录,以待深究. 表现为jQuery的post方法回 ...

随机推荐

  1. Vue中获取dom元素

    Vue.js虽然说是数据驱动页面的,但是有时候我们也要获取dom对象进行一些操作. vue的不同版本获取dom对象的方法不一样 Vue.js  1.0版本中,通过v-el绑定,然后通过this.els ...

  2. pmd 使用笔记

    pmd是一块开源的代码静态分析工具,使用java编写,可以自定义规则来进行自己想要的分析.pmd可以单独使用,也可以作为idea.eclipse的插件使用.它的规则分为xpath规则,和java规则. ...

  3. 使用C# .NET 将结构数组绑定到 Windows 窗体的方法

      本任务的内容 概要 要求 设计结构 向数组添加结构实例 将结构成员绑定到窗体控件 提供浏览数组的方式 分步示例 参考 概要 本文介绍如何向 Windows 窗体绑定结构数组. 该示例由一个 Win ...

  4. django.contirb

    Django标准库   Django的标准库存放在 django.contrib 包中.每个子包都是一个独立的附加功能包. 这些子包一般是互相独立的,不过有些django.contrib子包需要依赖其 ...

  5. Harbor私有仓库搭建

    1.安装docker yum install -y dockersystemctl start dockersystemctl enable docker 2.安装docker-compose 1.下 ...

  6. OpenGL学习进程(10)第七课:四边形绘制与动画基础

        本节是OpenGL学习的第七个课时,下面以四边形为例介绍绘制OpenGL动画的相关知识:     (1)绘制几种不同的四边形: 1)四边形(GL_QUADS) OpenGL的GL_QUADS图 ...

  7. 每天一个Linux命令(60)ip命令

        ip命令是Linux下较新的功能强大的网络配置工具.     (1)用法:     用法:  ip  [OPTIONS]  OBJECT  [COMMAND [ARGUMENTS]]     ...

  8. CentOS7在VMWare12中安装后不能上网解决办法

    首先要保证你的VMWare Workstation12 在安装号CentOS7后没改动什么关于网络相关的. 1.我的电脑一开始用的是VMWare WorkStations10,发现VMnet8根本不通 ...

  9. CSS3 画点好玩的东西

    虽然项目赶工还是挺忙的,但闲了总要找点乐子嘛,毕竟秃顶和猝死两座大山夹逼着编程员们. 好吧,其实是无聊起来我自己都怕,于是就做了点小玩意. .heart { position: relative; t ...

  10. python之使用__future__(解决版本不同,不兼容问题)

    Python的新版本会引入新的功能,但是,实际上这些功能在上一个老版本中就已经存在了.要“试用”某一新的特性,就可以通过导入__future__模块的某些功能来实现. 例如,Python 2.7的整数 ...