JavaScript高级编程———JSON

< script >
/*JSON的语法可以表达一下三种类型的值
简单值:使用与javas相同的语法,可以在JSON中表达字符串、数值、布尔值和null,但JSON不支持javascript中的特殊值undefined
对象:对象作为一种复杂数据类型,表示的是一组无序的键值对,而每个键值对中的值可以是简单值,也可以是复杂数据类型的值
数组: 数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值,数值的值也可以是任意类型——简单值、对象、数组
*/
//javascript中的对象字面量
var person = {
name: "Nicholas",
age:
};
//JSON的对象字面量,其次JSON的末尾是没有分号,对象属性必须加双引号,这是JSON中是必需的,属性的值可以是简单值,也可以是复杂类型值
var object = {
"name": "Nicholas",
"age": ,
"school": {
"name": "Merrimack College",
"location": "North Andover, MA"
}, };
/*数组:JSON中的第二种复杂数据类型是数组,JSON数组采用的就是JavaScript中的数组字面量形式*/
//javascript中的数组字面量
var values = [, "hi", true]; //JSON的数组也没有变量和分号,把数组和对象结合起来,可以构成更复杂的数据集合
[{
"title": "Professional JavaScript",
"authors": ["Nicholas C. Zakas"],
"edition": ,
"year":
},
{
"title": "Professional JavaScript",
"authors": ["Nicholas C. Zakas"],
"edition": ,
"year":
},
{
"title": "Professional Ajax",
"authors": ["Nicholas C. Zakas", "Jeremy McPeak", "Joe Fawcett"],
"edition": ,
"year":
},
{
"title": "Professional Ajax",
"authors": ["Nicholas C. Zakas", "Jeremy McPeak", "Joe Fawcett"],
"edition": ,
"year":
},
{
"title": "Professional JavaScript",
"authors": ["Nicholas C. Zakas"],
"edition": ,
"year":
}] /*早期JSON对象基本上市javascript的eval()函数
JSON对象有两个方法:stringify()、parse,在最简单的情况下,这两个方法分别用于
把javascript对象序列化为JSON字符串和把JSON字符串解析为原生javascript值
*/
var book = {
title: "Professional Javascript",
authors: ["Nicholas"],
edition: ,
year: ,
//toJSON: function () {
// return this.title;
//},
releaseDate: new Date(, , )
};
//使用JSON.stringify()将一个javascript对象序列化为一个JSON字符串,然后将它保存在jsonText中
var jsonText = JSON.stringify(book);
//将JSON字符串直接传递给JSON.parse()就可以得到相应的javascript值
var jsonParse = JSON.parse(jsonText);
console.log(jsonText);
console.log(jsonParse); /*序列化选项:实际上,JSON.stringify()除了序列化的javascript对象外,还可以接收另外两个参数,
这两个参数用于指定以不同的方式序列化javascript对象,第一个参数是过滤器,可以是一个数组,
也可以是一个函数,第二个参数是一个选项,表示是否在JSON字符串中保留缩进
*/ //过滤结果(这个属性与将要序列化的对象中的属性是对应的,因此在返回的结果字符串中,就只会包含这两个属性)
var jsonT = JSON.stringify(book, ["title", "edition"]);
console.log(jsonT);
//如果键为 "year" ,则将其值设置为 5000 ;如果键为 "edition" ,通过返回 undefined 删除该属性。
//最后,一定要提供 default 项,此时返回传入的值,以便其他值都能正常出现在结果中
var jsontarget = JSON.stringify(book,
function(key, value) {
switch (key) {
case "authors":
return value.join(",")
case "year":
return ;
case "edition":
return undefined;
default:
return value;
}
});
console.log(jsontarget); //字符串缩进:JSON.stringify()方法的第三个参数用于空值结果中的缩进和空白符,如果这个参数是一个值,那它表示的是每个级别缩进的空格数
var jsontrim = JSON.stringify(book, null, );
console.log(jsontrim); /*toJSON() 方法可以将 Date 对象转换为字符串,并格式化为 JSON 数据格式。JSON 数据用同样的格式就像x ISO-8601 标准: YYYY-MM-DDTHH:mm:ss.sssZ
如果存在 toJSON() 方法而且能通过它取得有效的值,则调用该方法。否则,返回对象本身
*/ /*解析选项 先是为 book 对象新增了一个 releaseDate 属性,该属性保存着一个 Date 对象。
这个对象在经过序列化之后变成了有效的 JSON 字符串,然后经过解析又在 bookCopy 中还原为一个 Date对象。
还原函数在遇到 "releaseDate" 键时,会基于相应的值创建一个新的 Date 对象。
结果就是bookCopy.releaseDate 属性中会保存一个 Date 对象。正因为如此,才能基于这个对象调用getFullYear() 方法。
*/
var bookCopy = JSON.parse(jsonText,
function(key, value) {
if (key == "releaseDate") {
return new Date(value);
} else {
return value;
}
});
alert(bookCopy.releaseDate.getFullYear());
< /script>/

  

JavaScript高级编程———JSON的更多相关文章

  1. javascript高级编程笔记01(基本概念)

    1.在html中使用JavaScript 1.  <script> 元素 <script>定义了下列6个属性: async:可选,异步下载外部脚本文件. charset:可选, ...

  2. JavaScript高级编程———基本包装类型String和单体内置对象Math

    JavaScript高级编程———基本包装类型和单体内置对象 <script> var stringObject = new String("hello world") ...

  3. JavaScript高级编程——Date类型

    JavaScript高级编程——Date类型 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...

  4. JavaScript高级编程——Array数组迭代(every()、filter()、foreach()、map()、some(),归并(reduce() 和reduceRight() ))

    JavaScript高级编程——Array数组迭代(every().filter().foreach().map().some(),归并(reduce() 和reduceRight() )) < ...

  5. JavaScript高级编程——引用类型、Array数组使用、栈方法

    JavaScript高级编程——引用类型.Array数组使用.栈方法 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999 ...

  6. JavaScript高级编程———数据存储(cookie、WebStorage)

    JavaScript高级编程———数据存储(cookie.WebStorage) <script> /*Cookie 读写删 CookieUtil.get()方法根据cookie的名称获取 ...

  7. JavaScript高级编程(一)

    书中第2章,在HTML中使用JavaScript摘要总结 2.1 <script>元素 <script>中的5个属性:charset:可选.表示通过src属性指定的代码的字符集 ...

  8. JavaScript高级编程 (1) - javscript是什么

    <重温javascript>这是一系列 javascript 的学习笔记,部分内容摘自书本或者网络,我这里只是基于自己的理解进行了梳理整理. 一个完整的 javscript 实现是由以下3 ...

  9. JavaScript高级编程II

         原文地址: http://www.onlamp.com/pub/a/onlamp/2007/08/23/advanced-javascript-ii.html?page=1 在前面的文章中, ...

随机推荐

  1. 预防和避免死锁的方法及银行家算法的java简单实现

    预防死锁 (1) 摒弃"请求和保持"条件 基本思想:规定所有进程在开始运行之前,要么获得所需的所有资源,要么一个都不分配给它,直到所需资源全部满足才一次性分配给它. 优点:简单.易 ...

  2. Windows打开应用,提示“此程序被组策略阻止”

    Windows打开应用,提示"此程序被组策略阻止",该问题为组策略限制了用户使用某个应用程序,一般可以在 1 控制面板--->管理工具--->本地安全策略-->软 ...

  3. CentOS的ssh sftp配置及权限设置[转载-验证可用]

    从技术角度来分析,几个要求:1.从安全方面看,sftp会更安全一点2.线上服务器提供在线服务,对用户需要控制,只能让用户在自己的home目录下活动3.用户只能使用sftp,不能ssh到机器进行操作 提 ...

  4. [Spring]@Autowired,@Required,@Qualifier注解

    @Required注解 @Required注解用于setter方法,表明这个属性是必要的,不可少的,必须注入值 假设有个测试类,里面有name和password两个属性 我给两个属性的setter方法 ...

  5. Web API 2 对于 Content-Length 要求严格

    最近在做一个工具,里面有一个发起http请求的操作,虽然工具不是用.NET写的,但是测试用服务器软件是.NET写的.在这里选择了ASP.NET MVC和Web API 2. 首先预定义Student与 ...

  6. vs 2017 IIS EXPRESS 增加局域网访问

    在VS调试站点,默认使用IISExpress,locall+端口,为了使用IP地址.多域名调试,找到 IISExpress下的applicationhost.config,在目标站点下增加类似行: & ...

  7. numpy.squeeze()的用法

    import numpy as np x = np.array([[[0], [1], [2]]]) print(x) """x= [[[0] [1] [2]]] &qu ...

  8. awk将某个字段按照分隔符分割之后统计次数

    cat label_movie2|grep BBD252CC0A4FE7D10C990261D5CEACB5|awk -F "," '{for(i=2;i<NF;i++) p ...

  9. Java1.8 JDK源码中,对两个类进行 按位与 操作是什么意思

    Java容器类库中的Map接口(java\util\Map.java)中有一个Entry接口(java\util\Map.java),其中有几个接口方法用到了类和类的按位与操作,即类和类之间有 &am ...

  10. Java堆外内存之突破JVM枷锁

    对于有Java开发经验的朋友都知道,Java中不需要手动的申请和释放内存,JVM会自动进行垃圾回收:而使用的内存是由JVM控制的. 那么,什么时机会进行垃圾回收,如何避免过度频繁的垃圾回收?如果JVM ...