JSON 基础知识

JSON:JavaScript 对象表示法(JavaScript Object Notation)
JSON 语法规则
  数据在名称/值对中
  数据由逗号分隔
  花括号保存对象
  方括号保存数组

JSON有6种类型的值:
  对象、数组、字符串、数字、布尔值、null

JSON对象是一个容纳“名/值”对的无序集合
  名字:任意字符串
  值:任意类型的JSON值,包括数组和对象(对象中可以嵌入对象)
注:JSON字符串必须使用双引号(单引号会报错)

一、对象
javascript中创建字面量:

1
2
3
4
var  object = {
     name: "lily" ,
     age:22
};

或者:

1
2
3
4
var  object = {
     "name" : "lily" ,
     "age" :22
}; 

JSON:

1
2
3
4
{
     "name" : "lily" ,
     "age" :22
}  

二、数组

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

例如,JSON中 :

[ "lily",25,"docter"]

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[
     {
         "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值

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
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()的结果中只包含数组中列出的属性
例如:

1
2
3
4
5
6
7
8
9
10
11
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)

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

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

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

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

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值