JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C , C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
Json格式的出现意义Json之前,大家都用 XML 传递数据。XML 是一种纯文本格式,所以适合在网络上交换数据,但是 XML 格式比较复杂,终于道格拉斯·克罗克福特(Douglas Crockford)发明了JSON 这种超轻量级的数据交换格式。
JSON支持的数据类型JSON里面的数据是以一种键值对的方式存在 ("key":"value")中值的类型可以是下面数据类型中的任意一种:
- 数字(整数或浮点数)
- 逻辑值(true 或 false)
- 字符串(在双引号中)
- 数组(在方括号中)
- 函数
- 对象(在大括号中)
- null
JSON的语法规则非常的简单,就是使用
- 大括号’{}’,
- 中括号’[]’,
- 逗号’,’,
- 冒号’:’,
- 双引号’“”’。
- 数据类型:
- 嵌套对象、数组、字符串、数字、布尔值或空值。
- JSON对象是直接可以使用jQuery操作的格式,如js中可以用对象(类名)点出属性(方法)一样
- JSON字符串仅仅只是一个字符串,一个整体,不截取的话没办法取出其中存储的数据,不能直接使用,除非你只想alert();
JSON字符串
var obj_str = '{ "name": "zhangsan", "age": "20" }';
JSON对象
var obj = {"name": "zhangsan", "age": "20" };
在服务端与客户端使用的过程中,往往会因为JSON字符串和JSON对象而产生一些不必要的麻烦,这里给大家分享几种JSON对象与JSON字符串互转的方法,以便于大家在不清楚的情况下查阅使用。
将JSON字符串和JSON对象互相转换
在开发的过程中,最常用的是将 JSON字符串转换为JSON对象来使用。
方法一:浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器
JSON.parse(jsonstr); // 可以将json字符串转换成json对象 JSON.stringify(jsonobj); // 可以将json对象转换成json对符串 var str = '{"name": "zhangsan", "age": "20" }'; var obj = {"name": "zhangsan", "age": "20" }; var obj_from_str = JSON.parse(str); console.log(obj.name); // zhangsan var str_from_obj = JSON.stringify(obj ); console.log(str_from_obj); // "{ "name": "zhangsan", "age": "20" }"
注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js。
方法二:jQuery插件支持的转换方式
jQuery.parseJSON(jsonstr); // 可以将json字符串转换成json对象 var str = '{"name": "zhangsan", "age": "20" }'; var obj_from_str = jQuery.parseJSON(str); console.log(obj.name); // zhangsan
方法三:Javascript支持的转换方式
eval('(' jsonstr ')'); // 可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号 var str = '{ "name": "zhangsan", "age": "20" }'; var obj=eval('(' str ')'); console.log(obj.name); // zhangsan
为什么要 eval 这里要添加 "("(" data ")");呢?
原因在于:eval本身的问题。 由于json是以'{}' 的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。
方法四:JSON官方的转换方式
http://www.json.org/ 提供了一个json.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法;
可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。
,