JSON简介


JSON官方网站: http://json.org/

RFC中规定的JSON语法: http://www.ietf.org/rfc/rfc4627

1,JSON是什么

    JSON是javascript对象的一种简单紧凑的标签。使用JSON表示法时,对象可以方便的转换成字符串来进行存储和转换(比如在不同程序或网络之间)。

    然而,JSON的真正优雅之处在于对象在JSON中是以普通javascript代码表示的,因此我们可以利用javascript的"自动"解析功能,让javascript把JSON中的字符串你内容解释为代码,而不需要其他的解析程序或转换器。

    JSON语法

    JSON数据的表示方法是一系列成对的参数与值,参数与值由冒号分隔,每对之间以逗号分隔:

    "param1":"value1","param2":"value2","param3":"value3"

    最终这些序列用花括号包围起来,构成表示数据的JSON对象:

    var jsonObject = {

            "param1":"value1",

            "param2":"value2",

            "param3":"value3"

        }

    对象jsonObject的定义使用标准javascript表示法的子集,这只是有效的javascript代码的一小部分。

    使用JSON表示法编写的对象也具有属性和方法,能够利用句号表示法进行访问:

    alert(jsonObject.param1);   //显示'value1'

    更好的是,JSON是一种以字符串格式实现数据交换的通用语法。不仅仅是对象,任何能够以一系列"参数":"值"对表示的数据,都能够用JSON表示法莱表示。使用前面提到的"序列化"过程可以方便地把JSON对象转换为字符串,而序列化的数据便于在网络环境中进行存储和传输。

#作为一种通用的数据交换语法,JSON的用途有些类似于XML,但它更易于阅读和理解。另外,大型XML文件的解析过程比较慢,而JSON提供的是javascript对象,随时可以使用。

2,访问JSON数据

    为了还原以JSON字符串编码的数据,需要把字符串转换为javascript代码,这通常称为字符串的"去序列化"

(1)使用eval()

    直到现在,才有一些浏览器能够直接支持JSON。但是由于JSON是javascript的一个子集,我们可以使用javascript的函数eval()把JSON字符串转换为javascript对象。

    javascript中的eval()函数会计算或运行作为参数传递的内容。如果参数是一个表达式,eval()会计算它的值,比如:

       var x = eval(4*3);    // x=12

    如果参数包含一个或多个javascript语句,eval()执行这些语句:

    eval("a=1;b=2;document.write(a+b);");   //向页面写入3

    eval()函数使用javascript解释程序解析JSON文本生成javascript对象:

    var myObject = eval('(' + jsonObjectString + ')');

    然后就可以在脚本里使用这个javascript对象:

    var user ='{"username":"xiaobaicai","age":13,"sex":"male",}'

    var myObject = eval('(' +user+ ')');

    alert(myObject.username)

(2)使用浏览器对JSON直接支持

    最新的浏览器都对JSON提供直接支持,从而可以不使用eval()函数

    浏览器会创建一个名为JSON的javascript对象来管理JSON的编码和解码。这个对象有两个方法:stringify()和parse()

    JSON.parse()

    JSON.parse()方法用于解释JSON字符串。它接收一个字符串作为参数,解析它,创建一个对象,并且根据字符串中找到的"参数":"值"对设置对象的参数:

var Mary = '{"height":1.9,"age":36,"eyeColor":"brown"}';
var myObject = JSON.parse(Mary);
var out = "";
for(i in myObject){
	out += i + "=" + myObject[i] + "\n";
	}
alert(out);

(3)在其他编程语言中使用JSON

    以python为例,在python中提供了2个操作json数据的函数:json.load(),json.dump()。

    json.load():用于对json数据的导入。和浏览器中JSON.parse()函数使用效果一样

    json.dump():用于对json数据的打包。和浏览器中JSON.stringifg()函数使用效果一样

3,JSON的数据序列化

    在数据存储和转换时,“序列化”是指把数据转换为便于通过网络进行存储和传输的形式,稍后再恢复为原始的格式。

    JSON选择字符串作为序列化数据的格式。因此,为了把JSON对象进行序列化(比如为了通过网络连接进行传输),需要用字符串的形式来表示它。

    在直接支持JSON的浏览器里,我们只需要简单地使用JSON.stringify()方法。

    JSON.stringify()

    利用JSON.stringify()方法可以创建对象的JSON编码字符串。

//先创建一个简单的对象,添加一些属性
var Dan = new Object()
Dan.name = "xiaobaicai";
Dan.age = 21;
Dan.sex = "male";
//然后使用JSON.stringify()方法序列化这个对象
JSON.stringify(Dan)

4,使用JSON创建对象

    JSON提供的是一种对对象序列化的方法,所以使用JSON序列化后的对象仍具有一般对象具有的属性,如属性,方法,等

5,JSON安全性

    使用JavaScript的eval()函数能够执行任何javascript命令,这可能会导致潜在的安全问题,特别是处理来源不明的JSON数据时。

    更安全的方法是使用内置JSON解析器的浏览器把JSON字符串转换为javascript对象,它只识别JSON文本,而且不会执行脚本命令。同时内置的JSON解析器的速度也比eval()快一些。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值