《Javascript 高级程序设计(第三版)》笔记0x21 JavaScript Object Notation

本文详细介绍了JSON的基本语法,包括简单值、对象和数组的表示方法。同时深入探讨了JSON的解析与序列化过程,以及如何通过序列化选项进行结果过滤、字符串缩进和自定义toJSON()方法。此外,还讲解了JSON.parse()的解析选项,如何使用还原函数处理复杂数据。

目录

语法

    简单值

    对象

    数组

 解析与序列化

    JSON对象

    序列化选项

        过滤结果

        字符串缩进

        toJSON()方法

    解析选项


语法

JSON 的语法可以表示以下三种类型的值。
    简单值:使用与 JavaScript 相同的语法,可以在 JSON 中表示字符串、数值、布尔值和 null。但 JSON 不支持 JavaScript 中的特殊值 undefined。
    对象:对象作为一种复杂数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。
    数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。

    简单值

    最简单的 JSON 数据形式就是简单值。如数值 5,字符串 "Hello world!"。JavaScript 字符串与 JSON 字符串的最大区别在于, JSON 字符串必须使用双引号(单引号会导致语法错误)。布尔值和 null 也是有效的 JSON 形式。但是,在实际应用中, JSON 更多地用来表示更复杂的数据结构,而简单值只是整个数据结构中的一部分。 

    对象

    与 JavaScript 的对象字面量相比, JSON 对象有两个地方不一样。首先,没有声明变量(JSON 中没有变量的概念)。其次,没有末尾的分号(因为这不是 JavaScript 语句,所以不需要分号)。对象的属性必须加双引号,这在 JSON 中是必需的。属性的值可以是简单值,也可以是复杂类型值 。

{
	"name": "Nicholas",
	"age": 29,
	"school": {
		"name": "Merrimack College",
		"location": "North Andover, MA"
	}
}

    数组

    JSON 数组也没有变量和分号。把数组和对象结合起来,可以构成更复杂的数据集合

[
	{
		"title": "Professional JavaScript",
		"authors": [
			"Nicholas C. Zakas"
		],
		edition: 3,
		year: 2011
	},
	{
		"title": "Professional JavaScript",
		"authors": [
			"Nicholas C. Zakas"
		],
		edition: 2,
		year: 2009
	},
	{
		"title": "Professional Ajax",
		"authors": [
			"Nicholas C. Zakas",
			"Jeremy McPeak",
			"Joe Fawcett"
		],
		edition: 2,
		year: 2008
	},
	{
		"title": "Professional Ajax",
		"authors": [
			"Nicholas C. Zakas",
			"Jeremy McPeak",
			"Joe Fawcett"
		],
		edition: 1,
		year: 2007
	},
	{
		"title": "Professional JavaScript",
		"authors": [
			"Nicholas C. Zakas"
		],
		edition: 1,
		year: 2006
	}
]

 解析与序列化

    JSON对象

    JSON 对象有两个方法: stringify()和 parse()。在最简单的情况下,这两个方法分别用于把JavaScript 对象序列化为 JSON 字符串和把 JSON 字符串解析为原生 JavaScript 值。

var book = {
        title: "Professional JavaScript",
        authors: [
            "Nicholas C. Zakas"
        ],
        edition: 3,
        year: 2011
       };
var jsonText = JSON.stringify(book);

    序列化选项

        过滤结果

var book = {
		"title": "Professional JavaScript",
		"authors": [
			"Nicholas C. Zakas"
		],
		edition: 3,
		year: 2011
	};
var jsonText = JSON.stringify(book, ["title", "edition"]);

var book = {
		"title": "Professional JavaScript",
		"authors": [
			"Nicholas C. Zakas"
		],
		edition: 3,
		year: 2011
	};
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;
		}
	});

        字符串缩进

    JSON.stringify()方法的第三个参数用于控制结果中的缩进和空白符。如果这个参数是一个数值,那它表示的是每个级别缩进的空格数。

var book = {
		"title": "Professional JavaScript",
		"authors": [
			"Nicholas C. Zakas"
		],
		edition: 3,
		year: 2011
	};
var jsonText = JSON.stringify(book, null, 4);

        toJSON()方法

//可以为任何对象添加 toJSON()方法
var book = {
		"title": "Professional JavaScript",
		"authors": [
			"Nicholas C. Zakas"
		],
		edition: 3,
		year: 2011,
		toJSON: function(){
			return this.title;
		}
	};
var jsonText = JSON.stringify(book);

    解析选项

   JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将在每个键值对儿上调用。为了区别 JSON.stringify()接收的替换(过滤)函数(replacer),这个函数被称为还原函数(reviver),但实际上这两个函数的签名是相同的——它们都接收两个参数,一个键和一个值,而且都需要返回一个值。

var book = {
		"title": "Professional JavaScript",
		"authors": [
			"Nicholas C. Zakas"
		],
		edition: 3,
		year: 2011,
		releaseDate: new Date(2011, 11, 1)
	};
var jsonText = JSON.stringify(book);
var bookCopy = JSON.parse(jsonText, function(key, value){
		if (key == "releaseDate"){
			return new Date(value);
		} else {
			return value;
		}
	});
alert(bookCopy.releaseDate.getFullYear());

 

内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值