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 02 Javascript
JS input文本框禁用右键和复制粘贴功能的代码
Apr 15 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
Apr 16 Javascript
JS实现侧悬浮浮动实例代码
Nov 29 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
Javascript基础教程之数组 array
Jan 18 Javascript
jQuery基于ajax实现星星评论代码
Aug 07 Javascript
Google 地图API资料整理及详细介绍
Aug 06 Javascript
Bootstrap源码解读导航条(7)
Dec 23 Javascript
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
js+html+css实现手动轮播和自动轮播
Dec 30 Javascript
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
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
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
php检测文件编码的方法示例
2014/04/25 PHP
php缓冲输出实例分析
2015/01/05 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
理解javascript异步编程
2016/01/27 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
浅谈node的事件机制
2017/10/09 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
js实现双色球效果
2020/08/02 Javascript
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
浅谈python中的变量默认是什么类型
2016/09/11 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
python 去除二维数组/二维列表中的重复行方法
2019/01/23 Python
如何提高python 中for循环的效率
2020/04/15 Python
深入浅析Python代码规范性检测
2020/07/31 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
批评与自我批评范文
2014/10/15 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
红楼梦读书笔记
2015/06/25 职场文书
2015年校医个人工作总结
2015/07/24 职场文书
Redis可视化客户端小结
2021/06/10 Redis
python中24小时制转换为12小时制的方法
2021/06/18 Python
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技