JSON总结
1:JSON介绍
JSON:JavaScript对象表示法,JavaScript Object Notation
JSON是一种基于文本,独立于语言的跨平台的轻量级数据交换格式,是存储和交换文本信息的语法,类似于XML,但是比XML更小,更快,更易解析。
JSON和XML都可以作为跨平台的数据交换格式,但是XML带有很多标记,同时js处理json不方便,因此我们经常选择JSON来处理数据
JSON使用JavaScript语法来描述数据对象,具有自我描述性,更容易理解。
JSON可以使用ajax传输数据
eg:
{
"code":0,
"msg":"success",
"list":[
{
"name":"张三",
"age":23
},
{
"name":"李四",
"age":25
},
{
"name":"王五",
"age":24
}
]
}
2:JSON与XML比较:
相同点:
- 都是纯文本
- 都具有自我描述性
- 都具有层级结构
- 通过js解析
- 使用ajax传送
XML:
- XML有标记
- 读取XML文档
- 使用XML DOM来循环遍历文档
- 读取值并存储在变量中
JSON:
- 没有标记
- 比XML更快,更短
- 读取字符串,使用evel()来处理字符串
3:JSON语法
- 花括号保存对象
- 方括号保存数组
- 数据由逗号分隔
- 数据在名称/值对中
- 文件类型:.json
- JSON文件的MIME类型:"application/json"
4:JSON使用
JSON转化为JavaScript对象
由于JSON文本语法格式与js创建JSON对象类似,因此对于JSON文本,无需js解析器,js使用evel("("+string+")"),来使JSON数据生成js对象
js利用ajax从web服务器上读取JSON数据,将JSON数据转化为JavaScript对象,然后在网页中使用该数据
语法:
var Obj = evel("("+txt+")")
json字符串:
符合json格式要求的js字符串
var jsonstr = "{name:'zyb',age:23}"
json对象:
符合json格式要求的js对象
var jsonobj = {name:'zyb',age:23}
JSON字符串转化为JSON对象
1:var jsonobj = evel("("+jsonstr+")")
2:var jsonobj = jsonstr.parseJSON();
3:var jsonobj = JSON.parse(jsonstr)
JSON对象转化为JSON字符串
1:var jsonstr = jsonobj.toJSONString()
2:var jsonstr = JSON.stringify(jsonobj)
操作:
console.log("操作之前:",typeof obj);
console.log("操作之前:",obj instanceof Object);
console.log("操作之前:",obj instanceof String);
console.log("操作之前:",Object.prototype.toString.apply(obj));
console.log("操作之前:",obj.constructor);
console.log("操作之前:",obj.constructor == Object);
var str = JSON.stringify(obj)
console.log("操作之后:",typeof obj);
console.log("操作之后:",str instanceof Object);
console.log("操作之后:",str instanceof String);
console.log("操作之后:",Object.prototype.toString.apply(str));
console.log("操作之后:",Object.prototype.toString.apply(str).slice(8,-1));
console.log("操作之后:",str.constructor);
console.log("操作之后:",str.constructor == String);
结果:
操作之前: object
操作之前: true
操作之前: false
操作之前: [object Object]
操作之前: function Object() { [native code] }
操作之前: true
操作之后: object
操作之后: false
操作之后: false
操作之后: [object String]
操作之后: String
操作之后: function String() { [native code] }
操作之后: true
JSON数据作为一种存储数据的结构,js可以对其进行CRUD操作
JSON:
var obj = {
"code":0,
"msg":"success",
"persons":[
{
"name":"张三",
"age":23
},
{
"name":"李四",
"age":25
},
{
"name":"王五",
"age":24
}
]
}
1:增:C,create
操作:
console.log("操作之前:",obj);
obj.persons.push({"name":"赵六","age":27});
console.log("操作之后:",obj);
结果:
操作之前: { code: 0,
msg: 'success',
list:
[ { name: '张三', age: 23 },
{ name: '李四', age: 25 },
{ name: '王五', age: 24 } ] }
操作之后: { code: 0,
msg: 'success',
list:
[ { name: '张三', age: 23 },
{ name: '李四', age: 25 },
{ name: '王五', age: 24 },
{ name: '赵六', age: 27 } ] }
2:查:R,retrieve
操作:
console.log("查询:",obj.persons[0]);
结果:
查询: { name: '张三', age: 23 }
3:改:U,update
操作:
console.log("操作之前:",obj);
obj.persons[0].age = 26;
console.log("操作之后:",obj);
结果:
操作之前: { code: 0,
msg: 'success',
list:
[ { name: '张三', age: 23 },
{ name: '李四', age: 25 },
{ name: '王五', age: 24 } ] }
操作之后: { code: 0,
msg: 'success',
list:
[ { name: '张三', age: 26 },
{ name: '李四', age: 25 },
{ name: '王五', age: 24 } ] }
4:删:D,delete
操作:
console.log("操作之前:",obj);
delete obj.persons[0];
console.log("操作之后:",obj);
结果:
操作之前: { code: 0,
msg: 'success',
list:
[ { name: '张三', age: 23 },
{ name: '李四', age: 25 },
{ name: '王五', age: 24 } ] }
操作之后: { code: 0,
msg: 'success',
list: [ , { name: '李四', age: 25 }, { name: '王五', age: 24 } ] }
5:遍历,for...in
操作:
for(var person in obj.persons){
console.log(person+" :"+obj.persons[person]);
console.log(person+" :"+obj.persons[person].name);
console.log(person+" :"+obj.persons[person].age);
}
结果;
0 :[object Object]
0 :张三
0 :23
1 :[object Object]
1 :李四
1 :25
2 :[object Object]
2 :王五
2 :24