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,则表示从结果中删除相应的键;返回其他值,则将该值插入到结果中。
JSON 在JavaScript 中的应用及自己的理解的更多相关文章
- JavaScript中对null和undefined的理解
前沿: 今天工作中遇到了监视一个变量是undefined,结果判断写的是==null 返回值是true,这个结果引起了我对这两个东西的兴趣. 查询了相关的文章理解并测试了.发现有以下特点: 1.广义上 ...
- 在javascript中对于this指向的再次理解
总所周知,function () {}函数体内的this对象指向的是调用该函数的对象,那么我们看一下这个例子 <script> var length = 3; function fn () ...
- JavaScript中this指针指向的彻底理解
this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 这一点与函数中自由变量Action-varibal不同 var ...
- javascript 中对this关键字的一些理解
var self = this 可能会觉得奇怪为什么我会定义一个_self的变量, 因为在js里,this不用对于其他的对象语言,他的解析过程与运行过程中this会改变的.这里简单说说js里this的 ...
- javascript中的prototype和__proto__的理解
在工作中有时候会看到prototype和__proto__这两个属性,对这两个属性我一直比较蒙圈,但是我通过查阅相关资料,决定做一下总结加深自己的理解,写得不对的地方还请各位大神指出. 跟__prot ...
- 对JavaScript中原型及原型链的理解
什么是原型: 1,我们所创建的每一个函数,解析器都会向该函数对象添加一个属性prototype,这个属性指向一个对象,这个对象就是我们所谓的原型对象 2,如果我们将函数作为普通函数调用时,proto ...
- JavaScript中function 之return false的理解(实例代码)
1.司空见惯代码,在某一dom节点上注册事件方法 $("#btnResponse").click(Login); $("#txtCode").keydown(R ...
- 谈JSON在Ajax中的使用
JSON是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解析和生成.AJAX是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术.之前也曾介绍过在PHP语言中使用JSON的文章, ...
- 难道这就是JavaScript中的"闭包"
其实对于JavaScript中的"闭包"还没真正理解,这次在实际Coding中似乎遇到了"闭包"的问题,仅此摘录,以待深究. 表现为jQuery的post方法回 ...
随机推荐
- 解决Raize日历控件显示的问题
解决Raize日历控件显示的问题 近自己的程序被测试人员发现一个小问题,就是程序中的日历选择框,显示中的“星期一.星期二....”都显示成了“星.....”,我自己看了代码,原来是raize的控件问题 ...
- js内置数据类型
JS 中分为七种内置类型,七种内置类型又分为两大类型:基本类型和对象(Object). 基本类型有六种: number , string , boolean , null , undefined , ...
- boost之时间timer
C++一直缺乏对时间和日期的处理能力,一般借助于C的struct tm和time():timer包含三个类其中timer,progress_timer是计时器类,进度指示类是progress_disp ...
- Python2 socket TCPServer 多线程并发 超时关闭
在阿里云上测试过,可以直接使用. 用IP和端口发送数据,会返回echo:+接收到的数据 #coding=utf-8 import socket import threading,getopt,sys, ...
- Ajax知识
一.Ajax介绍前戏 1.json介绍 1.什么是json? json(JavaScript Object Notation,JS对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript ...
- [不常用] - CSRF(跨站点请求伪造)
CSRF,Cross Site Request Forgery,即跨站点请求伪造. 这种攻击是指,在用户正常登录系统以后,攻击者诱使用户访问一些非法链接,以执行一些非法操作. 比如:如果删除用户操 ...
- python3 多线程编程
python / 并发 / 线程 / 对象 / 编程 0.什么是线程 1. 多线程模块 2. 创建线程的方法 3. join()方法 4.isAlive()方法 5. name属性和daemon属 ...
- 每天一个Linux命令(40)vmstat命令
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控. 它能够对系统的整体情况进行统计,无法对某个进程 ...
- 建议50:Python中的高级数据结构
# -*- coding:utf-8 -*- ''' Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint collections模块包含了内建类型之外 ...
- Windows下MarialDB使用
命令行控制启动和关闭:mysqld --console #这样启动ctrl+c即为关闭 启动:双击mysqld.exe即可 #此为后台启动 关闭:mysqladmin -uroot -pr ...