JSON的初步理解

本文介绍了JSON的基本概念,包括简单值、对象和数组的表示方法,并详细解释了如何使用JavaScript进行JSON数据的序列化和解析。

JSON是一种数据格式,而不是一种变成语言。它并不从属于javascript,而且并不是只有js才使用JSON。很多语言都有针对JSON的解析器和序列化器。

语法

JSON语法可以表示以下三种类型的值:

1、简单值:使用与js相同的语法,可以再json中表示字符串、数值、布尔值、和null,但是不能表示undefined;

2、对象:对象作为一种复杂的数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以简单值,也可以是复杂数据类型的值;

3、数组:数组时一种复杂的数据类型,表示一组有序的值的列表,可以通过索引来访问其中的值。数组的值也可以是任意类型——简单值、对象、数组。

json不支持变量、函数或对象实例。

1  简单值

最简单的json数据形式就是简单值。

eg: ‘hello world’

2  对象

对象字面量:

var book = {
		title:1,
		edition:2
	};

JSON中要求给属性加引号

var book = {
		‘title’:1,
		‘edition’:2
	};

JSON表示上述对象的方式如下:

{
		‘title’:1,
		‘edition’:2
	};

3  数组

数组字面量:

var value = ['12','21','3']
在JSON中表示为:

['12','21','3']

在JSON中没有变量和分号。把数组和对象结合起来可以构成更复杂的数据集合。

[
    {
        "title": "coder",
        "time": "2007",
        "author": [
            "Niks C. Zz"
        ]
    },
    {
        "title":"edtior",
        "time":"2004",
        "author":[
            "Miks C. Ad"
        ]
    }
]

解析和序列化

早期的JSON解析基本就是使用eval()函数。

1  JSON对象

json对象有两个方法:stringify和parse。

分别用于把javascript对象序列化为json字符串和把json字符串解析为原生的javascript值。

var book = {
		title:1,
		edition:2
	};
	var os = JSON.stringify(book);/*将js序列化json字符串*/
	console.log	(os);
	var os1 =JSON.parse(os);/*将json字符串解析成原生js值*/
	/*如果传给JSON.parse的字符串不是有效的json,该方法会抛出错误*/
	console.log(os1);
打印出:

{"title":1,"edition":2}

2  序列化对象

stringify()除了要序列化js对象外,还可以接受另外两个参数,一个参数是个过滤器,可以是一个数组也可以是一个函数,第二个参数是一个选项,表示是否在json字符串中保留缩进。

var book = {
		title:"professional javascript",
		edition:2,
		author:["Nike A Tang"],
		year:2011
	};
	/*过滤结果*/
	var jsonText = JSON.stringify(book,["title","edition"]);
	console.log(jsonText);

打印结果:

{"title":"professional javascript","edition":2}

如果函数返回了undefined,那么相应的属性会被忽略。

stringify还可以接受第三个参数。其作用时控制结果中的缩进和空白符。如果这个参数是一个数值,便是的是每个级别缩进的空格数。

var json1 =JSON.stringify(book,null,4);

如果是一个字符串,那么在json 字符串中将被用作缩进字符。

var json2 =JSON.stringify(book,null,"--");

3   解析选项

parse函数也可以接受另一个参数,该参数是一个函数,将在每个键值对儿上调用。为了区别stringify函数,这个函数称为还原函数。

var book = {
		title:"professional javascript",
		edition:2,
		author:["Nike A Tang"],
		year:2011,
		releasDate:new Date(2011,11,1)
	};
	var jsontext = JSON.stringify(book);
var copy = JSON.parse(jsontext,function  (key,value) {
		if (key == "releasDate") {
			return new Date(value);
		} else{
			return value;
		}
	});
	console.log(copy.releasDate.getFullYear());//2011



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值