json是什么?

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")中值的类型可以是下面数据类型中的任意一种:

  1. 数字(整数或浮点数)
  2. 逻辑值(true 或 false)
  3. 字符串(在双引号中)
  4. 数组(在方括号中)
  5. 函数
  6. 对象(在大括号中)
  7. null
JSON语法规则

JSON的语法规则非常的简单,就是使用

什么是"JSON字符串",什么是"JSON对象"
  1. JSON对象是直接可以使用jQuery操作的格式,如js中可以用对象(类名)点出属性(方法)一样
  2. 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数组(Json对象与Json字符串你了解吗)(1)

在开发的过程中,最常用的是将 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。

,