前述:
Json-数据格式(不是语言,而是格式,而且并不是只有js才使用JSON)
一.json数据类型
(1)简单值
说明:和js一样,字符串,数值,布尔值,null
表示方法:如数值100,就表示为 100
字符串表示 “天元小龙”(只能用双引号,不可以用单引号)
(2)对象
说明:简单说就是键值对儿,如
name:“天元小龙”,
name是键名(属性),天元小龙为键值。
表示方法:
在以前的js中字面量表示,假设我们表示一个人,性别男,年龄1000,资产千万通常这样表示
var person={
sex: "男",
interest:"女",
age: 1000
};
但在JSON表示中,要这样
{
"sex": "男",
"interest":"女",
"age":1000
}
看起来js与JSON非常类似吧,但也有区别,JSON并不会像js那样用var声明变量,因为它只是一种格式。
细心的人也已经观察到,JSON的属性,如sex,interest,age,必须加双引号,且在末尾不需要加分号,这是特别需要注意的。
JSON数据格式还允许属性值取复杂数据类型,例如在加个属性,学校属性
{
"sex": "男",
"interest":"女",
"age":1000,
"school":{
"name":"湖南工业大学",
"location":"株洲市泰山西路"
}
(3)数组
说明:可以通过数值索引访问其中的值的数据类型
表示方法:
在js中我们表示一个小队年龄分布
var ages=[25,15,18];
在JSON中,可以采用同样的方法
[25,15,18]
注意:JSON数组中也没有变量和最后的分号。
还可以把数组与对象结合使用。
例如:有两个人,名字分别为甲和乙,甲喜欢看红楼梦、水浒传,乙喜欢看三国、西游记,甲是男人,乙是个女人,那么我们可以这样表示
[
{
"name":"甲",
"sex":"男",
"likebook":["红楼梦","水浒传"]
},
{
"name":"乙",
"sex":"女",
"likebook":["三国","西游记"]
}
]
以上是JSON所能表示的数据类型及其基本语法,接下来要说明JSON的具体应用
二. 应用
我们都知道XML语言的魅力在于,可以解析成Dom文档,但JSON却可以直接解析成js,在使用上,显然后者更方便快捷。
(1)syringify( )和parse( )概述
JSON对象有两个方法 stringify( )和parse( ),前者通俗来说把js对象变成JSON数据格式,后者是反之。
举个例子:
var person= {
name:"甲",
sex:"男",
likebook:["红楼梦","水浒传"]
};
我们结下来的任务就是把js代码序列化为JSON字符串
首先定义一个变量text接收字符串,然后转换,代码为:
var text=JSON.stringify(person);
我能们就得到一个这样的JSON格式
{
"name":"甲",
"sex":"男",
"likebook":["红楼梦","水浒传"]
}
同样的,我们可以把这个JSON在转换为js,代码如下
var person2=JSON.parse(text);
怎么样是不是感觉很方便。
(2)stringify( )的第二和第三个参数的作用
如果我们想把js代码变为JSON是,如果我们不想知道这个人他看了什么书,我们只想知道他的名字和姓名,那也好办,只要这样
var text=JSON.stringify(book,["name","sex"]);
这样我们就得到
{
"name":"甲",
"sex":"男"
}
有有人说我想得到这样的JSON格式
{
--"name":"甲",
-- "sex":"男",
--"likebook":["红楼梦","水浒传"]
}
也就是说设置每个级别的缩进字符为制表符,这真的可以吗,也好做,在stringify( )中加入第三个参数,
var text=JSON.stringify(person,null,"--");
这第三个参数表示缩进个数,不能超过10,当然是可以使用制服表符代替。
(3)parse( )方法种使用还原函数的意义
最后一个说prase( )方法,前面说过如果我们想把JSON变为js需要用到,直接就可以变成js代码,那是因为我们设计到的内容都是属性,属性值,但我们没有涉及到方法,如果像这样为person添加一个方法 ,根据js面向对象的特点,我们添加一个吃Eat( )方法
var person= {
name:"甲",
sex:"男",
likebook:["红楼梦","水浒传"],
eat:new Eat( )
};
接下来解析为JSON格式
var text=JSON.stringify(person);
这倒是没什么问题,但如果你再把text解析为js的时候
var person2=JSON.parse(text);
就会出现问题,eat( )方法将不在是函数方法,而是字符串,那这时候就会出现问题,多亿我们需要一种方法来确保,还能把text中的eat( )方法转换为js函数,
那就需要prase( )放大的第二个参数,设置还原函数
就像这样
var person2=JSON.parse( text, function( key,value){
If(key="eat"){
return new Eat( );
}else{
return value;
}
}
);
Json-数据格式(不是语言,而是格式,而且并不是只有js才使用JSON)
一.json数据类型
(1)简单值
说明:和js一样,字符串,数值,布尔值,null
表示方法:如数值100,就表示为 100
字符串表示 “天元小龙”(只能用双引号,不可以用单引号)
(2)对象
说明:简单说就是键值对儿,如
name:“天元小龙”,
name是键名(属性),天元小龙为键值。
表示方法:
在以前的js中字面量表示,假设我们表示一个人,性别男,年龄1000,资产千万通常这样表示
var person={
sex: "男",
interest:"女",
age: 1000
};
但在JSON表示中,要这样
{
"sex": "男",
"interest":"女",
"age":1000
}
看起来js与JSON非常类似吧,但也有区别,JSON并不会像js那样用var声明变量,因为它只是一种格式。
细心的人也已经观察到,JSON的属性,如sex,interest,age,必须加双引号,且在末尾不需要加分号,这是特别需要注意的。
JSON数据格式还允许属性值取复杂数据类型,例如在加个属性,学校属性
{
"sex": "男",
"interest":"女",
"age":1000,
"school":{
"name":"湖南工业大学",
"location":"株洲市泰山西路"
}
(3)数组
说明:可以通过数值索引访问其中的值的数据类型
表示方法:
在js中我们表示一个小队年龄分布
var ages=[25,15,18];
在JSON中,可以采用同样的方法
[25,15,18]
注意:JSON数组中也没有变量和最后的分号。
还可以把数组与对象结合使用。
例如:有两个人,名字分别为甲和乙,甲喜欢看红楼梦、水浒传,乙喜欢看三国、西游记,甲是男人,乙是个女人,那么我们可以这样表示
[
{
"name":"甲",
"sex":"男",
"likebook":["红楼梦","水浒传"]
},
{
"name":"乙",
"sex":"女",
"likebook":["三国","西游记"]
}
]
以上是JSON所能表示的数据类型及其基本语法,接下来要说明JSON的具体应用
二. 应用
我们都知道XML语言的魅力在于,可以解析成Dom文档,但JSON却可以直接解析成js,在使用上,显然后者更方便快捷。
(1)syringify( )和parse( )概述
JSON对象有两个方法 stringify( )和parse( ),前者通俗来说把js对象变成JSON数据格式,后者是反之。
举个例子:
var person= {
name:"甲",
sex:"男",
likebook:["红楼梦","水浒传"]
};
我们结下来的任务就是把js代码序列化为JSON字符串
首先定义一个变量text接收字符串,然后转换,代码为:
var text=JSON.stringify(person);
我能们就得到一个这样的JSON格式
{
"name":"甲",
"sex":"男",
"likebook":["红楼梦","水浒传"]
}
同样的,我们可以把这个JSON在转换为js,代码如下
var person2=JSON.parse(text);
怎么样是不是感觉很方便。
(2)stringify( )的第二和第三个参数的作用
如果我们想把js代码变为JSON是,如果我们不想知道这个人他看了什么书,我们只想知道他的名字和姓名,那也好办,只要这样
var text=JSON.stringify(book,["name","sex"]);
这样我们就得到
{
"name":"甲",
"sex":"男"
}
有有人说我想得到这样的JSON格式
{
--"name":"甲",
-- "sex":"男",
--"likebook":["红楼梦","水浒传"]
}
也就是说设置每个级别的缩进字符为制表符,这真的可以吗,也好做,在stringify( )中加入第三个参数,
var text=JSON.stringify(person,null,"--");
这第三个参数表示缩进个数,不能超过10,当然是可以使用制服表符代替。
(3)parse( )方法种使用还原函数的意义
最后一个说prase( )方法,前面说过如果我们想把JSON变为js需要用到,直接就可以变成js代码,那是因为我们设计到的内容都是属性,属性值,但我们没有涉及到方法,如果像这样为person添加一个方法 ,根据js面向对象的特点,我们添加一个吃Eat( )方法
var person= {
name:"甲",
sex:"男",
likebook:["红楼梦","水浒传"],
eat:new Eat( )
};
接下来解析为JSON格式
var text=JSON.stringify(person);
这倒是没什么问题,但如果你再把text解析为js的时候
var person2=JSON.parse(text);
就会出现问题,eat( )方法将不在是函数方法,而是字符串,那这时候就会出现问题,多亿我们需要一种方法来确保,还能把text中的eat( )方法转换为js函数,
那就需要prase( )放大的第二个参数,设置还原函数
就像这样
var person2=JSON.parse( text, function( key,value){
If(key="eat"){
return new Eat( );
}else{
return value;
}
}
);