一、JSON的语法可以表示以下三种类型的值:

1、简单值:字符串,数值,布尔值,null
比如:5,"你好",false,null
JSON中字符串必须用双引号,而JS中则没有强制规定。
2、对象
比如:
 {
"name":"蔡斌",
"age":21,
"isRich":false,
"school":{
"name":"广东工业大学",
"location":"广州市大学城"
}
}
需要注意的是,属性值必须要加双引号。
3、数组
比如:
 [23,"i",false];

 [
{
"name":"蔡斌"
},
{
"name":"张三"
}
]
 
二、序列化与解析
1、将JS对象序列化成JSON对象  JSON.stringify():
比如:
 var person = {
name:"蔡斌",
age:21,
school:“广东工业大学”
} var personJson = JSON.stringify(person);
结果如下:
 {"name":"蔡斌","age":21,"school":"广东工业大学"}
//typeof personJson;
//String
注意:序列化JS对象时,所有函数(除了等下要说到的toJSON()方法以外),原型成员都会被忽略,所有值为undefined的属性也会被忽略。
例如:
 var person = {
name:"蔡斌",
age:21,
school:“广东工业大学”.
phone:undefined,
sayHi:function(){
alert("hi, i am caibin");
}
}
 console.log(JSON.stringify(person));
结果如下
 {"name":"蔡斌","age":21,"school":"广东工业大学"}
 
序列化函数的参数,可以有另外两个可选的参数,这其中,第一个参数是过滤器,可以是一个数组,表示需要留下的属性,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进,这个选项可以是数字,比如:3,也可以是字符串,但是数字最大只能为10,(超过10当做10),字符串长度最多为10(超过10当做10)。
比如:
 
当第一个参数是数组时,返回要保留的属性:
 var caibinsname = JSON.stringify(person,["name"]);
结果:
{"name":"蔡斌"}
 
当第一个参数是一个函数时,它有两个参数key,value,分别对应JS对象的属性名和属性值
 var caibin = JSON.stringify(person,function(key,value){
switch(key){
case "name":
return "caibin";
case "age":
return value + 1;
case "school":
return value;
default:
return value;
}
});
结果如下:
{"name":"caibin","age":22,"school":"广东工业大学"}
名字被改成了英文的,然后年龄也增加了1
 
接下来是可选参数的第二个参数
当第二个参数是数字时:
var caibinsname = JSON.stringify(person,["name","age"],4);
结果:其中每个属性前面缩进了4个空格
 {
"name": "蔡斌",
"age": 21
}

再如:

 var caibinsname = JSON.stringify(person,["name","age"],"**");
结果如下:
 {
**"name": "蔡斌",
**"age": 21
}
 
第一个参数不用时,需要将其设置为null:
var caibinsname = JSON.stringify(person,null,4);
 
toJSON()方法:
当JSON.stringify()方法不能满足对某些对象的序列化要求时,可以给对象增加一个自定义的方法。
原生的Date对象有一个toJSON方法,可以将其转换成IS0 8601日期字符串(这和在Date对象上调用.toISOString()方法返回的结果一致)
比如:
 var newDate = new Date();
JSON.stringify(newDate);
结果如下:
"2014-07-29T16:11:27.340Z"
 
我们可以为任何对象添加toJSON方法:
 var book = {
title:"JavaScript权威指南",
edition:6,
toJSON:function(){
return "《"+this.title + " 第六版》"
}
};
JSON.stringify(book);
结果如下:
"《JavaScript权威指南 第六版》"
 
小结下:
假设把一个对象Object传递给JSON.stringify(),序列化Object的顺序如下:
a、如果存在toJSON()方法,则调用toJSON()方法,否则返回该对象本身。
b、如果可选的参数中,第一个参数是过滤器,则应用这个过滤器,并且将a中的返回值传递给这个过滤器
c、对于b中返回的每个值进行序列化
d、如果可选的参数中,第二个参数存在,那么执行相应的格式化操作。
 
 
2、将JSON字符串解析成JS对象
//personjson : {"name":"蔡斌","age":21,"school":"广东工业大学"}
 
 var caibin = JSON.parse(personjson);
结果如下:
Object {name: "蔡斌", age: 21, school: "广东工业大学"}
typeof caibin;
//object
 
JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将在每个键值对上调用。这个函数通常被称作还原函数。
比如:
 var caibin = JSON.parse(personjson,function(key,value){
if(key == "name"){
return "caibin";
}
return value;
});
结果如下:
Object{name: "caibin", age: 21, school: "广东工业大学"}
原来的"name":”蔡斌“ 已经被还原成 name:"caibin"
 
通常将日期字符串转换成Data对象时,要用到还原函数:
 var book = {
"title":"JavaScript高级程序设计",
edition:3,
releaseDate:new Date(2011,11,1)
}
var bookJson = JSON.stringify(book); var bookcopy = JSON.parse(bookJson,function(key,value){
if(key == "releaseDate"){
return new Date(value);
}
return value;
});
结果bookcopy的值如下(chrome控制台打印):
 
Object {title: "JavaScript高级程序设计", edition: 3, releaseDate: Thu Dec 01 2011 00:00:00 GMT+0800 (中国标准时间)}

小谈一下JavaScript中的JSON的更多相关文章

  1. Java和JavaScript中使用Json方法大全

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka   摘要:JSON(JavaScript Object Notation) 是一种轻量级的数 ...

  2. 简单使用JSON,JavaScript中创建 JSON 对象(一)

    JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更快,更易解析. ...

  3. Json学习总结(1)——Java和JavaScript中使用Json方法大全

    摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语 ...

  4. JavaScript中使用JSON,即JS操作JSON总结

    JSON(JavaScript Object Notation 对象标记) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生 ...

  5. JavaScript中解析JSON --- json.js 、 json2.js 以及 json3.js的使用区别

    JSON官方(http://www.json.org/)提供了一个json.js,json.js是JSON官方提供的在JavaScript中解析JSON的js包,json.js.json2.js.js ...

  6. 在javascript中使用Json

    jSON是JavaScript面向对象语法的一个子集.由于JSON是JavaScript的一个子集,因此它可清晰的运用于此语言中. 文本生成json对象,必须在外面加一对括号. js 代码 var m ...

  7. 有关javascript中的JSON.parse和JSON.stringify的使用一二

    有没有想过,当我们的大后台只是扮演一个数据库的角色,json在前后台的数据交换中扮演极其重要的角色时,作为依托node的前端开发,其实相当多的时间都是在处理数据,准确地说就是在处理逻辑和数据(这周实习 ...

  8. 在JavaScript中使用json.js:访问JSON编码的某个值

    演示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...

  9. 在JavaScript中使用json.js:使得js数组转为JSON编码

    在json的官网中下载json.js,然后在script中引入,以使用json.js提供的两个关键方法. 1.数组对象.toJSONString() 这个方法将返回一个JSON编码格式的字符串,用来表 ...

随机推荐

  1. SLP alpha 阶段总结

    这学期快结束了,SLP的alpha阶段也结束了.在alpha版中,我实现了SLP的基础练习模块和全局设置模块,其他几个模块由于能力有限.时间有限而没有实现. 其中基础练习模块目前只能支持4/4拍,有三 ...

  2. Linux中可用于管道操作的命令总结

    在Linux中药进行稍复杂的操作,通常需要借助管道命令"|"多个命令的组合,形式如下: command 1 |  command 2 |  command 3 -- 在linux中 ...

  3. spring ioc三种注入方式

    spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...

  4. jQuery.serialize() 函数详解////////////z

    serialize()函数用于序列化一组表单元素,将表单内容编码为用于提交的字符串. serialize()函数常用于将表单内容序列化,以便用于AJAX提交. 该函数主要根据用于提交的有效表单控件的n ...

  5. Nodejs&express+mongodb完成简单用户登录(即Nodejs入门)

    刚了解nodejs,发现nodejs配置起来不复杂,但也有很多需要注意的地方,今天就记录一下,以后也可拿出来看看. 要完成这个简单的示例,从零开始,走三步就行了. 一.搭建开发环境 二.创建项目(ex ...

  6. mysql大数据分表后查询

    当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度,举例说明: 1亿条数据,分100张表 1.首先创建100张表 $i=0;while($i<=99){echo "$n ...

  7. Oracle 正则表达式使用示例

    正则表达式的基本例子 在使用这个新功能之前,您需要了解一些元字符的含义.句号 (.) 匹配一个正规表达式中的任意字符(除了换行符).例如,正规表达式 a.b 匹配的字符串中首先包含字母 a,接着是其它 ...

  8. LINUX+Vmware+SVN的配置和安装

    LINUX+Vmware+SVN的配置和安装 验证SVN安装了没有 svnserve --version 查看CentOS自带JDK是否已安装. ◆输入:yum list installed |gre ...

  9. Zend框架设置数据库连接编码为utf8三种方法

    第一种:$conn['host'] = '127.0.0.1';$conn['username'] = '56_' . $tenant['tenant'];$conn['password'] = $t ...

  10. 01.线性表 ArrayList

    public class MyArrayList { //容量 ; //存放数组元素 private object[] _items; //数组大小 private int _size; //元素个数 ...