JavaScript中的JSON操作

一、什么是JSON?

    JSON:JavaScript 对象表示法(JavaScript Object Notation)。JSON 是存储和交换文本信息的语法。类似 XML。JSON 比 XML 更小、更快,更易解析。

<html>
<body>
<h2>在 JavaScript 中创建 JSON 对象</h2>

<p>
Name: <span id="jname"></span><br />
Age: <span id="jage"></span><br />
Address: <span id="jstreet"></span><br />
Phone: <span id="jphone"></span><br />
</p>

<script type="text/javascript">
var JSONObject= {
"name":"Bill Gates",
"street":"Fifth Avenue New York 666",
"age":56,
"phone":"555 1234567"};
document.getElementById("jname").innerHTML=JSONObject.name
document.getElementById("jage").innerHTML=JSONObject.age
document.getElementById("jstreet").innerHTML=JSONObject.street
document.getElementById("jphone").innerHTML=JSONObject.phone
</script>

</body>
</html>

二、序列化JavaScript数据为JSON数据

     1、 使用静态的JSON.stringify(value[,replacer][,space])将数据序列化为JSON数据。参数说明:

若replacer不是一个函数或者数组,则会抛出异常;若value包含一个循坏引用,也抛出异常。


     2、toJSON()方法:如果value定义了toJSON()方法,那么stringify()方法等价于调用toJSON(),且stringify()方法会首先调用toJSON()方法,并返回该方法返回的结果。

      定义toJSON()方法的类有:String、Boolean、Date、Number。对于没有定义toJSON()方法的数据类型,如Object将被删除,Array将被替换为null。在序列化的过程中,下列字符将会被转义:

      引号(“)、反斜杠(\)/、退格(b)、换行(n)、回车(r)、水平制表(t)、四位十六进制(uhhhh)、Fromfeed(f).

//数据过滤
document.write("数据过滤:"+"<br/>");
var per = new Object;
per.sex = "male";
per.age = 29;
per.birthday = new Date(1994,2,18);

var memberFilter = ["sex","age"];
var jsontext1 = JSON.stringify(per,memberFilter,"\t");
document.write(jsontext1+"<br/><br/>");

//数据转换
document.write("数据转换:"+"<br/>");
var contents = ["One","Two","Three"];
var jsontext2 = JSON.stringify(contents,toUpper);
document.write(jsontext2+"<br/><br/>");

function toUpper(key,value)
{
	return value.toString().toUpperCase();
}

//toJSON()方法
document.write("toJSON()方法:"+"<br/>");
Object.prototype.toJSON = function(key)
{
    var val;
    for(val in this)
    {
        if(typeof(this[val]) === 'string')
        {
            this[val] = this[val].toUpperCase();
        }
    }
    return this;
};
var jsontext3 = JSON.stringify(per);
document.write(jsontext3);

结果:



三、逆序列化JSON数据为Javascript数据

    使用静态的JSON.parse(text[,reviver])可以将JSON数据逆序列化为JavaScript数据。参数text是JSON字符串;参数reviver定义一个用于过滤和转换结果。

     过滤转换结果是按照从后到前的顺序进行的,对每一个对象成员都会调用该函数:

     1、如果函数返回一个值,则成员的值用该值替换;

     2、如果函数返回一个接收到的原值,则成员的结构不会发生变化;

     3、如果函数返回null或者undefined,则成员将被删除。

     该参数常用于转换JSON数据的ISO日期格式字符串为Javascript的UTC格式的Date对象。如果解析正确,返回一个对象或者数组,;若text指定的JSON字符串格式有错,抛出异常。

var jsontext = '{"birthday":"2008-12-25T12:00:00Z"}';
var date = JSON.parse(jsontext,dateReviver);
var string = date.birthday.toUTCString();

function dateReviver(key,value)
{
	var a;
	if(typeof value === 'string')
	{
		var re = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/;
		a = re.exec(value);
		if(a)
		{
			return new Date(Date.UTC(+a[1],+a[2]-1,+a[3],+a[4],+a[5],+a[6]));
		}
	}
	return value;
};
document.write(string);

结果:


    

   



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值