第三章 web前端开发工程师--JavaScript进阶程序设计 3-16 JSON

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wgf5845201314/article/details/90798048

                                                  JavaScript JSON

 

本节课所讲内容:

  1. JSON语法
  2. 解析和序列化

主讲教师:Head老师

一.JSON语法

JSON和XML类型,都是一种结构化的数据表示方式。所以,JSON并不是JavaScript独有的数据格式,其他很多语言都可以对JSON进行解析和序列化。

简单值

  • "Lee" 这两个量就是JSON的表示方法,一个是JSON数值,一个是JSON字符串。布尔值和null也是有效的形式。但实际运用中要结合对象或数组。

对象

JavaScript对象字面量表示法:

var box = {

       name : 'Lee',

       age : 100

};

而JSON中的对象表示法需要加上双引号,并且不存在赋值运算和分号:

{

       "name" : "Lee",                                        //使用双引号,否则转换会出错

       "age" : 100

}

数组

JavaScript数组字面量表示法:

var box = [100, 'Lee', true];

 

而JSON中的数组表示法同样没有变量赋值和分号:

[100, "Lee", true]

 

一般比较常用的一种复杂形式是数组结合对象的形式:

[
	{
		"title" : "a",
		"num" : 1
	},
	{
		"title" : "b",
		"num" : 2
	},
	{
		"title" : "c",
		"num" : 3
	}
]

我们可以把JSON结构数据保存到一个文本文件里,然后通过XMLHttpRequest对象去加载它.

二.解析和序列化

如果是载入的JSON文件,我们需要对其进行使用,那么就必须对JSON字符串解析成原生的JavaScript值。当然,如果是原生的JavaScript对象或数组,也可以转换成JSON字符串。

对于讲JSON字符串解析为JavaScript原生值,早期采用的是eval()函数。但这种方法既不安全,可能会执行一些恶意代码。

        var box = '[{"name":"a","age":1},{"name":"b","age":2},{ "name":"c","age":3}]';
       // alert(box);         // JSON 字符串
       var jso = eval(box);   //使用eval()函数解析
       alert(jso);            //得到Javascript原生值

JSON对象提供了两个方法:

一个是将原生JavaScript值转换为JSON字符串:stringify();

另一个是将JSON字符串转换为JavaScript原生值:parse()。

var box = '[{"name" : "a","age" : 1},{"name" : "b","age" : 2}]';	//特别注意,键要用双引号
alert(box);						
var json = JSON.parse(box);							//不是双引号,会报错
alert(json);

var box = [{name : 'a', age : 1},{name : 'b', age : 2}];	//JavaScript原生值
var json = JSON.stringify(box);						//转换成JSON字符串
alert(json);										//自动双引号

在序列化JSON的过程中,stringify()方法还提供了第二个参数。第一个参数可以是一个数组,也可以是一个函数,用于过滤结果。第二个参数则表示是否在JSON字符串中保留缩进。

var box = [{name : 'a', age : 1, height : 177},{name : 'b', age : 2, height : 188}];

var json = JSON.stringify(box, ['name', 'age'], 4);

alert(json);

 

还有一种方法可以自定义过滤一些数据,使用toJSON()方法,可以将某一组对象里指定返回某个值。

var box = [{name : 'a', age : 1, height : 177, toJSON : function () {

       return this.name;

}},{name : 'b',age : 2, height : 188, toJSON : function () {

       return this.name;

}}];

var json = JSON.stringify(box);

alert(json);   

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/wgf5845201314/article/details/90798048