一、对json的理解

    json是一种数据格式,不是一种编程语言,json并不从属于javascript。
    json的语法可以表示以下三种类型的值
    1)简单值
           与js相同的语法,可以在json中表示字符串(必须使用双引号,单引号会导致语法错误)、数值、布尔值、和null,但是不支持undefined。
    2)对象
           json的对象是一种复杂的数据类型,表示一组无序的键值对
 {
"name": "Nicholas",
"age": "27"
}         
     3)数组
          表示一组有序值的列表
          json的数组表示:[25,'hi',true]
          注:数组也没有变量和分号
      4)数组和对象结合的更复杂的数组集合      
[ //JSON数组也没有变量和分号
{
"title":"haha",
"authors":[
"1":"2",
"3":"4"
]
},
"name":"xixi"
]

  JSON与JavaScript的对象字面量的区别
//JavaScript对象字面量
var obj = {
"name":"Nicholas",
"age":29
};
//JSON对象
{
"name":"Nicholas",
"age":29
}
  1、没有声明变量(json没有变量的概念);
       2、没有末尾的分号;
  3、JSON字符串必须使用双引号(单引号会导致语法错误); 

二、解析与序列化

2.1 JSON对象 
  JSON对象有两个方法:
  stringify():把js对象序列化为json字符串
  parse():把json字符串解析为原生javascript值
var book = {
title : "Professional JavaScript",
authors : [
"Nicholas C . Zakas"
],
edition : 3,
year : 2011
};
var jsonText = JSON.stringify(book);
alert(jsonText); // {"title":"Professional JavaScript","authors":["Nicholas C . Zakas"],"edition":3,"year":2011}

  默认的JSON.stringify()输出的JSON对象不包含任何空格字符或缩减。

  在序列化JavaScript对象时,所有的函数及原型对象都会被有意忽略,不体现在结果中。此外,值为undefined的任何属性也都会被跳过,结果中最终都是值为有效JSON数据类型的实例属性。

var bookcopy = JSON.parse(jsonText); //Object {title: "Professional JavaScript", authors: Array[1], edition: 3, year: 2011}
2.2 序列化选项
  JSON.stringify()可以接收三个参数,第一个参数是要序列化的javascript对象,第二个参数是一个过滤器,可以是一个数组也可以是一个函数;第三个参数是一个选项,表示是否在JSON字符串中保留缩进。
  当第二个参数是数组的时候,返回的结果只会包含数组里的属性;
var jsonText = JSON.stringify(book, ["title","edition"]); //{"title":"Professional JavaScript","edition":3}
  当是函数的时候,函数有两个参数,属性名和属性值,根据属性名可以知道应该序列化哪些属性,函数返回值就是相应键的值,如果函数返回undefined,则相应属性忽略。
var jsonText = JSON.stringify(book, function(key, value){
switch(key){
case "authors":
return value.join(",");
case "year":
return 5000;
case "edition":
return undefined;
default:
return value;
}
}); //{"title":"Professional JavaScript","authors":"Nicholas C . Zakas","year":5000}
       第三个参数用与控制结果中的缩进与空白,参数是数值,表示每个级别缩进的空格数,最大缩进格数为10;参数也可以是一个字符串,如制表符或"- -",字符串长不能超过10;
       
  toJSON()方法:作为函数过滤器的补充,返回其自身的json数据格式。
var book = {
title : "Professional JavaScript",
authors : [
"Nicholas C . Zakas"
],
edition : 3,
year : 2011,
toJSON: function(){
return this.title;
}
};
var jsonText = JSON.stringify(book); //"Professional JavaScript"
  假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下:
(1)如果存在toJSON()方法而且能通过它取得有效的值,则调用该函数。否则,返回对象本身。
(2)如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。
(3)对第(2)步返回的每个值进行相应的序列化。
(4)如果提供了第三个参数,执行相应的格式化。   
2.3 解析选项
  JSON.parse()也可以接收一个参数,参数是一个函数,称为还原函数(reviver),再将日期字符串转换成Date对象时,经常要用到还原函数。
var book = {
title : "Professional JavaScript",
authors : [
"Nicholas C . Zakas"
],
edition : 3,
year : 2011,
releaseDate : new Date(2011, 11,1)
};
var jsonText = JSON.stringify(book);
//{"title":"Professional JavaScript","authors":["Nicholas C . Zakas"],"edition":3,"year":2011,"releaseDate":"2011-11-30T16:00:00.000Z"}
var bookcopy = JSON.parse(jsonText, function(key, value){
if(key == "releaseDate"){
return new Date(value);
} else {
return value;
}
}); //Object {title: "Professional JavaScript", authors: Array[1], edition: 3, year: 2011, releaseDate: Thu Dec 01 2011 00:00:00 GMT+0800 (中国标准时间)}
alert(bookcopy.releaseDate.getFullYear()); //

三、再说几句toJSON()

  toJSON 方法由 JSON.stringify 函数使用。 JSON.stringify 将 JavaScript 值序列化为 JSON 文本。 如果向 JSON.stringify 提供了 toJSON 方法,则在调用 JSON.stringify 时将调用 toJSON 方法。

toJSON 方法是 Date JavaScript 对象的内置成员。 它返回 UTC 时区的 ISO 格式日期字符串(由后缀 Z 表示)。

  可重写 Date 类型的 toJSON 方法,也可为其他对象类型定义 toJSON 方法,以实现在 JSON 序列化之前对特定对象类型进行数据转换。

var contact = new Object();
contact.firstname = "Jesper";
contact.surname = "Aaberg";
contact.phone = ["555-0100", "555-0120"]; contact.toJSON = function(key)
{
var replacement = new Object();
for (var val in this)
{
if (typeof (this[val]) === 'string')
replacement[val] = this[val].toUpperCase();
else
replacement[val] = this[val]
}
return replacement;
}; var jsonText = JSON.stringify(contact);//{"firstname":"JESPER","surname":"AABERG","phone":["555-0100","555-0120"]}

小白科普之JavaScript的JSON的更多相关文章

  1. 小白科普之JavaScript的函数

    一 概述 1.1 函数声明 (1)function命令 函数就是使用function命令命名的代码区块,便于反复调用.这种声明方式叫做函数的声明(Function Declaration). func ...

  2. 小白科普之JavaScript的BOM模型

    一.什么是BOM 1. BOM是browser object model的缩写,简称浏览器对象模型: 2. BOM提供了独立于内容而与浏览器窗口进行交互的对象,描述了与浏览器进行交互的方法和接口: 3 ...

  3. 小白科普之JavaScript的数组

    一.与其他语言数据的比较    相同点:有序列表    不同点:js的数组的每一项可以保存任何类型的数据:数组的大小是可以动态调整的 二.数组创建的两种方法 1)  var colors = new ...

  4. 小白科普之JavaScript的DOM模型

    微信公众号“前端大全”推送了一篇名为“通俗易懂的来讲讲DOM”的文章,把javascript原生DOM相关内容讲解的很详细.仔细读了一遍,觉得整理总结的不错,对自己也很使用,所以把内容整理过来,并根据 ...

  5. JavaScript 拼接JSON

    <script language="javascript" type="text/javascript"> var json="" ...

  6. 在Javascript操作JSON对象,增加 删除 修改

    在Javascript操作JSON对象,增加删除修改全有的,详情见代码 <script type="text/javascript"> var jsonObj2 = { ...

  7. JavaScript对Json的增删改属性

    <script type="text/javascript"> var json = { "age":24, "name":&q ...

  8. 简单使用JSON,JavaScript读取JSON文本(三)

    JavaScript 读取 JSON 文本转换为对象 JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 Jav ...

  9. 第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据

    第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据 学习要点: 1.JSON语法 2.解析和序列化 前两章我们探讨了XML的结构化数据,但开发人员还是觉得这 ...

随机推荐

  1. 小白学习mysql之存储过程的优劣分析以及接入控制

    存储过程的优劣 存储过程是一组实现特定功能的SQL语句集合,存储过程一经编译便存储在了服务器上,可以通过调用存储过程的名字以及传入相应的参数来使用存储过程.要高层次的掌握存储过程,不能觉得依葫芦画瓢, ...

  2. Linux下高频命令分类辑录(基本使用篇)

    本文目的:总结linux下常用命令的基本使用方法 文件权限: 文档权限设置命令:chmod 数字模式: 文档权限由-rwxrwxrwx十个字符组成,其中第一个代表文档类型,后面九个字符按照顺序分为三组 ...

  3. #Linux学习笔记# Linux文件的所有者、群组和其他人

    1.关于所有者.群组和其他人 在Linux系统中,每个文件都具有User.Group和Others三种身份的权限配置.那这三种身份分别表示什么意思呢?配置这三种身份的权限有啥意义呢? (1)文件所有者 ...

  4. Bootstrap系列 -- 28. 下拉菜单状态

    下拉菜单项的默认的状态(不用设置)有悬浮状态(:hover)和焦点状态(:focus). 下拉菜单项除了上面两种状态,还有当前状态(.active)和禁用状态(.disabled).这两种状态使用方法 ...

  5. jquery设置元素的readonly与diabled属性方法

    cppy from : http://www.cnblogs.com/RascallySnake/archive/2010/08/03/1791365.html Jquery的api中提供了对元素应用 ...

  6. [C#]Attribute特性(2)——方法的特性及特性参数

    上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...

  7. MySQL 5.6 my.cnf 参数说明

    # 以下选项会被MySQL客户端应用读取. # 注意只有MySQL附带的客户端应用程序保证可以读取这段内容. # 如果你想你自己的MySQL应用程序获取这些值. # 需要在MySQL客户端库初始化的时 ...

  8. struts2理解

    (1) Struts2(一)---struts2的环境搭建及实例 (2) struts2(二)---ModelDriven模型驱动 (3) Struts2属性驱动与模型驱动 (4)

  9. 高斯混合聚类及EM实现

    一.引言 我们谈到了用 k-means 进行聚类的方法,这次我们来说一下另一个很流行的算法:Gaussian Mixture Model (GMM).事实上,GMM 和 k-means 很像,不过 G ...

  10. 洛谷P1993 小 K 的农场

    题目描述 小 K 在 Minecraft 里面建立很多很多的农场,总共 n 个,以至于他自己都忘记了每个 农场中种植作物的具体数量了,他只记得一些含糊的信息(共 m 个),以下列三种形式描 述: 农场 ...