你的位置:首页 > Java教程

[Java教程]JSON 基础知识总结



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没有声明变量(JSON中没有变量的概念)
  ② JSON没有末尾的分号(因为不是javascript语句,所以不需要分号)

二、数组
JSON数组采用的是javascript中数组字面量形式
javascript中:
  var values = [25,"hi",ture];
JSON中:
  [25,"hi",ture]
总结:
  JSON数组也没有变量和分号
扩展:
  把数组和对象结合起来可以构成更复杂的数据结合
例如:

[  {    "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对象有两个方法:
  ① 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数据格式