JSON相关知识汇总


Posted in Javascript onJuly 03, 2015

JSON:JavaScript 对象表示法(JavaScript Object Notation)

JSON 语法规则

数据在名称/值对中

数据由逗号分隔

花括号保存对象

方括号保存数组

JSON有6种类型的值:

对象、数组、字符串、数字、布尔值、null

JSON对象是一个容纳“名/值”对的无序集合

名字:任意字符串

值:任意类型的JSON值,包括数组和对象(对象中可以嵌入对象)
注:JSON字符串必须使用双引号(单引号会报错)

一、对象

javascript中创建字面量:

var object = {
  name:"lily",
  age:22
};

或者:

var object = {
  "name":"lily",
  "age":22
};

JSON:

{
  "name":"lily",
  "age":22
}

二、数组

JSON数组采用的是javascript中数组字面量形式
扩展:

把数组和对象结合起来可以构成更复杂的数据结合
例如:

[
  {
    "name":"lily",
    "age":22,
    "job":"docter"
  },
  {
    "name":"nicy",
    "age":21,
    "job":"teacher"
  },
  {
    "name":"lily",
    "age":22,
    "job":"AE"
  }
]

三、解析与序列化

JSON拥有和javascript类似的语法,可以把JSON数据结构解析为有用的javascript对象

1.JSON对象

收发JSON数据

读取、写入、发送和接收JSON数据对象时,需要转换成字符串,并能从字符串转换为JSON数据对象。(用于javascript相同的方式读写他们)

JSON对象有两个方法:

① stringify(): 把javascript对象序列化为JSON字符串

② parse(): 把JSON字符串解析为原生的javascript值

实例:

var book = {
  title:"professional JavaScript",
  authors:[
    "lily"
  ],
  edition:3,
  year:2011
};
var jsonText = JSON.stringify(book);
alert(jsonText);   //{"title":"professional JavaScript","authors":["lily"],"edition":3,"year":2011}
alert(typeof jsonText);   //string
var bookCopy = JSON.parse(jsonText);
alert(typeof bookCopy);   //object 

这个例子中使用JSON.stringify()把一个javascript对象book序列化为一个JSON字符串,然后保存到jsonText中;将JSON字符串jsonText直接传给JSON.parse()就得到了相应的javascript值

注:序列化javascript对象时,最终值都是有效JSON数据类型的实例属性,任何无效的值都会被跳过

2.序列化选项

JSON.stringify()在序列化javascript对象时,可以接收两个参数

参数一:过滤器,可以是一个数组或函数

参数二:一个选项,表示是否在JSON字符串中保留缩进
1)过滤结果
如果过滤器的参数是数组,那么JSON.stringify()的结果中只包含数组中列出的属性
例如:

var book = {
  "title":"professional JavaScript",
  "authors":[
    "lily"
  ],
  edition:3,
  year:2011
}; 
var jsonText = JSON.stringify(book,["title","edition"]);
alert(jsonText); //{"title":"professional JavaScript","edition":3}
alert(typeof jsonText); // string

2)字符串缩进:
JSON.stringify()方法的第三个参数用于控制结果中的缩进和空白符
3)toJSON()方法
给对象定义toJSON()方法,可以返回其自身的JSON数据格式

四、JSON访问值

第一种:简单数组
['item1','item2','item3']
取值:通过数字索引访问嵌入的值(第一项的索引为0)

['item1','item2','item3']
var items = ['item1','item2','item3'];
alert(items[0]);     // item1

第二种:使用{}表示对象和符合数组
{ "key":"value" }
取值:通过键名访问嵌入的值

var oExample = { "name":"lily" };
alert(oExample.name);     // lily
alert(oExample["name"]);     // lily

使用这两种方式,可以用子记录(带命名的或数值的索引键)描述很多数据结构:

例如:

var oNovelist = {
  "firstName":"lily",
  "lastName":"russ",
  "novels":
      [
        {
          "title":"and choas died",
          "year":"1970"
        },
        {
          "title":"the famale man",
          "year":"1976"
        }
      ]
}; 
var msg = oNovelist.firstName+" "+oNovelist.lastName+"'s"+" "+oNovelist.novels[0].title+" "+"was published in"+oNovelist.novels[0].year;
alert(msg);   // lily russ's and choas died was published in1970

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JavaScript网页制作特殊效果用随机数
May 22 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
Mar 11 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
Jun 24 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
May 03 Javascript
JavaScript的原型继承详解
Feb 15 Javascript
JS实现窗口加载时模拟鼠标移动的方法
Jun 03 Javascript
jQuery实现新消息在网页标题闪烁提示
Jun 23 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
Oct 20 Javascript
js中数组插入、删除元素操作的方法
Feb 15 Javascript
JS判断两个对象内容是否相等的方法示例
Apr 10 Javascript
浅谈vux之x-input使用以及源码解读
Nov 04 Javascript
从源码角度来回答keep-alive组件的缓存原理
Jan 18 Javascript
javascript表格的渲染组件
Jul 03 #Javascript
解决jquery实现的radio重新选中的问题
Jul 03 #Javascript
移动端JQ插件hammer使用详解
Jul 03 #Javascript
jQuery+AJAX实现无刷新下拉加载更多
Jul 03 #Javascript
Javascript实现字数统计
Jul 03 #Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
Jul 03 #Javascript
jQuery中 delegate使用的问题
Jul 03 #Javascript
You might like
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
js选项卡的制作方法
2017/01/23 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
简单讲解Python中的闭包
2015/08/11 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
银行财务部实习生的自我鉴定
2013/11/27 职场文书
大学校庆策划书
2014/01/31 职场文书
财务会计专业求职信
2014/06/09 职场文书
党的生日演讲稿
2014/09/10 职场文书
医生辞职信范文
2015/03/02 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
地道战观后感2000字
2015/06/04 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android