标签:
JSON是一种数据格式,不是一种编程语言。
一、语法
JSON语法可以表示以下三种类型的值:简单值、对象、数组。
1、简单值
最简单的JSON数据值就是简单值:
5
"hello world"
2、对象
JSON对象与JAVASCRIPT字面量有些不同,以下是javascript中的对象字面量:
// 表示方法1
var person = {
name:"Lillian",
age:24
};
// 表示方法2
var person1 = {
"name":"Lillian",
"age":24
};
JSON对象有两个不一样的地方,1)没有声明变量(JSON对象中没有变量的概念);2)没有末尾的分号;3)对象的属性必须加双引号
//json表示上述对象的方式
{
"name":"Lillian",
"age":24
}
{
"name":"Lillian",
"age":24,
"school":{
"name":"CQUPT",
"location":"ChongQing"
}
}
3、数组
JSON表示数组:
[25,"hi",true]
把对象和数组结合起来,可以表示复杂的数据结构:
[
{
"title": "professional javascript",
"author": [
"Matthew"
],
"edtion": 3,
"year": 2011
},
{
"title": "professional javascript",
"author": [
"Matthew"
],
"edtion": 4,
"year": 2012
},
{
"title": "professional javascript",
"author": [
"Matthew"
],
"edtion": 5,
"year": 2013
},
{
"title": "professional javascript",
"author": [
"Matthew"
],
"edtion": 6,
"year": 2014
},
{
"title": "professional javascript",
"author": [
"Matthew"
],
"edtion": 7,
"year": 2015
}
]
二、序列化选项
与XML数据结构要解析成DOM文档而且从中提取数据极为麻烦相比,JSON可以解析为JAVASCRIPT的优势及其明显。
1、JSON对象
// JSON对象有两个方法,分别用于把Javascript对象序列化成json字符串和把json字符串解析为原生javascript值
var book = {
title:"professional javascript",
authors:[
"Matthew"
],
edition:3,
year:2016
};
// 序列化成字符串
var jsonText= JSON.stringify(book);
alert(jsonText);
// 创建json对象
var bookCopy = JSON.parse(jsonText);
alert(bookCopy);
2、过滤结果和缩进
JSON.stringify()除了要序列化的javascript对象外,还可以接受另外两个参数:第一个参数是一个过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。
// exampl1: 过滤器是数组 var book = { title:"professional javascript", authors:[ "Matthew", "Lillian" ], edition:3, year:2016 }; var jsonText = JSON.stringify(book, ["title","edition"]); // example2:过滤器是函数 var jsonText2 = JSON.stringify(book, function(key, value){ switch(key){ case "authors": return value.join(","); case "edition": return undefined; //相当于去掉 case "year": return 5000; default: return value; //相当于保留原值 } }); // example3: 第三个参数表示每个级别缩进的空格数 var jsonText3 = JSON.stringify(book, null,8); // example4: 第三个参数是非数值,则在JSON字符串中被用作缩进字符 var jsonText4 = JSON.stringify(book, null,"A");
3、toJSON方法
toJSON可以作为函数过滤器的补充,如果存在toJSON方法而且能够通过它取得有效值,那么调用该方法;否则,按默认顺序执行序列化
// 可以为任何对象添加toJSON方法 // 如果存在toJSON方法而且能够通过它取得有效值,那么调用该方法;否则,按默认顺序执行序列化 var book = { title:"professional javascript", authors:[ "Matthew", "Lillian" ], edition:3, year:2016, toJSON:function(){ return this.title; } }; var jsonText = JSON.stringify(book);
三、解析选项
JSON.stringify()可以接受两个参数,第二个参数如果是一个函数,将在每个键值对上调用:
var book = { title:"professional javascript", authors:[ "Matthew", "Lillian" ], edition:3, year:2016, // 调用JSON.stringify会解析每一个选项,因此以下的date对象也会被解析成字符串 releaseDate:new Date(2016,8,13) }; var jsonText = JSON.stringify(book); var bookCopy = JSON.parse(jsonText, function(key, value){ // 被还原成了Date对象 if(key == "releaseDate"){ return new Date(value); }else{ return value; } }); // releaseDate被还原成了对象,因此可以调用getFullYear()方法 alert(bookCopy.releaseDate.getFullYear());
《JAVASCRIPT高级程序设计》JSON语法/解析/序列化
标签:
原文地址:http://www.cnblogs.com/bluebirid/p/5768130.html