JSON

啊呀呀,终于写到了JSON了。莫名的开心,虽然还是被说进度慢,不过,我不管,我就是开心。恩,好好学习,好好加油。(这是一段毫无逻辑的话,我也不知道说啥了)

JSON是JavaScript的一个严格的子集,利用JavaScript中的一些模式来表示结构化数据。它是一种数据格式,而不是一种编程语言。

【语法】

JSON的语法支持简单值、对象和数组三种类型的值。不支持变量、函数或对象实例。与JavaScript中表示数据的某些语法相同,但是并不局限于JavaScript范畴。

简单值

使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null。但JSON不支持JavaScript中的特殊值undefined。

JavaScript字符串与JSON字符串的最大区别在于,JSON字符串必须使用双引号。

对象

对象作为一种复杂数据类型,表示一种无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂值。

与JavaScript的对象字面量相比,JSON对象一没有声明变量(JSON中设有变量的概念),二是没有末尾的分号。属性的值可以是简单值有,也可以是复杂类型值。

数组

也是一种复杂数据类型,表示一组有序值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。

JSON数组采用的就是JavaScript中的数组字面量形式。JSON数组也没有变量和分号。把数组和对象结合起来,可以构成更复杂的数据集合。

对象和数组通常是JSON数据结构的最外层形式,利用他们能够创造出各种各样的数据结构。

【解析与序列化】

JSON拥有与JavaScript类似的语法,也可以把JSON数据结构解析为有用的JavaScript对象。

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

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

这个例子使用JSON.stringify()把一个JavaScript对象序列化为一个JSON字符串,然后将它保存在变量jsonText中。

【序列化选项】

JSON.stringify()可以接收两个参数,一个参数是个 过滤器,可以是一个数组,也可以是一个函数。第二个参数是一个选项,表示是否在JSON字符串中保留缩进。这两个参数用于指定以不同方式序列化JavaScript对象。

过滤结果

如果过滤参数是数组,那么JSON.stringify()的结果中将只包含数组中列出的属性。

为了改变序列化对象的结果,函数返回的值就是相应键的值。如果函数返回了undefined,那么相应的属性会被忽略。

要序列化的对象中的每一个对象都要经过过滤器。

字符串缩进

JSON.stringify()的方法的第三个参数用于控制结果中的缩进和空白符。如果这个参数是一个数值,那它表示的是每个级别缩进的空格数。如果缩进参数是一个字符串而非数值,则这个字符串将在JSON字符串中被用作缩进字符(不再使用空格)。缩进字符串最长不能超过10个字符长。

toJSON()方法

假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下

(1)如果存在toJSON()方法而且能通过他取得有效的值,则调用该方法,否则,返回对象本身。

(2)如果提供了第二个参数,应用这个函数过滤器。传入函数的过滤器的值是第(1)步返回的值。

(3)对第(2)步返回的值进行相应的序列化。

(4)如果提供了第三个参数,执行相应的格式。

【解析选项】

JSON.parse()方法也可以接收另一个参数,该参数是一个函数(还原函数),将在每个键值对儿上调用。如果还原函数返回undefined,则表示要从结果中删除相应的键。如果返回其他值,则将该值插入到结果中。

JavaScript(8)——JSON的更多相关文章

  1. 面向对象的JavaScript(2):类

    在小项目中对于JavaScript使用,只要写几个function就行了.但在大型项目中,尤其是在开发追求良好的用户体验的网站中,如SNS,就会 用到大量的JavaScrpt,有时JavaScript ...

  2. 前端开发面试题总结之——JAVASCRIPT(一)

    ___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...

  3. 前端开发面试题总结之——JAVASCRIPT(三)

    ___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...

  4. 前端开发面试题总结之——JAVASCRIPT(二)

    ___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...

  5. python进阶05 常用问题库(1)json os os.path模块

    python进阶05 常用问题库(1)json os os.path模块 一.json模块(数据交互) web开发和爬虫开发都离不开数据交互,web开发是做网站后台的,要跟网站前端进行数据交互 1.什 ...

  6. c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具

    c#实例化继承类,必须对被继承类的程序集做引用   0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...

  7. 《你必须知道的javascript(上)》- 2.this与对象原型

    1 关于this 1.1 为什么使用this 随着你的使用模式越来越复杂,显式传递上下文对象会让代码变得越来越混乱,使用this则不会这样.当我们介绍对象和原型时,你就会明白函数可以自动引用合适的上下 ...

  8. 你不知道的Javascript(上卷)读书笔记之一 ---- 作用域

    你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些"坑",在这里写一些博客记录一下笔记以便消化吸收. 1 编译原理 在此 ...

  9. 初探JavaScript(三)——JS带我"碰壁"带我飞

    已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入.到目前为止已经看完<JavaScrip ...

随机推荐

  1. 面试题-Java Web-JSP部分

    1.什么是JSP页面? JSP页面是一种包含了静态数据和JSP元素两种类型的文本的文本文档.静态数据可以用任何基于文本的格式来表示,比如:HTML或者XML.JSP是一种混合了静态内容和动态产生的内容 ...

  2. Linux安装mysql mysql5.5.40 <NIOT>

    一.    操作系统与软件 操作系统及版本 Centos 6.4 依赖包 gcc.gcc-c++.cmake.ncurses-devel 下载目录 /opt Mysql安装目录 /usr/local/ ...

  3. BT 的相关资料

    1.Android中bluetooth的架构 http://blog.csdn.net/u011960402/article/details/11035947 2.Android4.0中Bluetoo ...

  4. php 编程效率(3)

    提高php编程效率的53个小知识点:用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中 搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当 ...

  5. Scala并发编程

    Scala的actor提供了一种基于事件的轻量级线程.只要使用scala.actors.Actor伴生对象的actor方法,就可以创建一个actor.它接受一个函数值/闭包做参数,一创建好就开始运行. ...

  6. sublime从官网纯净版到插件完整版

    01.纯净版下载地址:www.sublimetext.com/ 02.下载Package Control插件管理工具,网址:https://packagecontrol.io/ 安装介绍:https: ...

  7. MQ队列堆积太长,消费不过来怎么办(转)

    转自:http://windwrite.com/archives/603 我们现有的业务就面临此问题,消息生产太快,消费不过来,导致队列堆积很长,把服务器内存耗尽,这时RabbitMQ的处理能力很低下 ...

  8. cocoaPods使用

    1更新版本:pod repo update 有时太老的gem版本,搜索不到最新SDK库 特殊情况下,由于网络或者别的原因,通过 CocoaPods 下载的文件可能会有问题. 这时候您可以删除 Coco ...

  9. win2008阿里一键环境包mysql老是1067报错

    目前查看并不是染毒导致mysql无法启动,而是在mysql的配置文件中配置了log这个参数,这个参数语义不明确,请您将“--log”更改为general_log_file并添加一行“general_l ...

  10. 关于Unity项目中创建项目遇到的一些问题

    1.Unity调用Android的方法默认不是在UI线程执行,所以在Android上写一些页面的重绘的方法,让Unity去调用时,注意要在Android中添加对应的runOnUiThread才可以: ...