关于JSON的定义:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。非常适合于服务器与 JavaScript 的交互。
JSON是JavaScript 的原生格式,这意味着在 JavaScript 中处理 JSON数据不需要任何特殊的 API 或工具包。
JSON 库支持许多不同的编程语言。为了方便地处理JSON数据,JSON提供了json.js包
前后台交互json实在是用的太多太多,特此总结记录一下:
在JSON中,有两种结构:对象和数组。【数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。】
1.对象
对象的表现形式是 {...}
例如: var object = {"name":"张三","age":25,"sex":"男"}
2. 数组:值(value)的有序集合
数组的表达形式是: [{...},{...},{...}]
例如: var arr = [{"name":"张三","age":25,"sex":"男"},{"name":"李四","age":20,"sex":"女"}]
在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。
JSON字符串:
var str1 = '{ "name": "张三", "sex": "男" }';
JSON对象:
var str2 = { "name": "张三", "sex": "男" };
一、对应服务器返回的JSON字符串转换为JSON对象(包括以下四种方法)
要运用上面的str1,必须运用下面的要领先转化为JSON对象:
①. //由JSON字符串转换为JSON对象,这种方式也适合以普通javascipt方式获取json对象
var obj = eval("(" + str1 +")");
那么eval函数里面为什么要添加双引号加括号的形式呢?
原因在于:eval本身的问题。由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。,如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]
②. var obj = str1.parseJSON(); //由JSON字符串转换为JSON对象
③. var obj = JSON.parse(str1); //由JSON字符串转换为JSON对象
④. var obj = jQuery.parseJSON( str1); // parseJSON()函数属于全局的jQuery对象。
jQuery.parseJSON()函数用于将格式完好的JSON字符串转为与之对应的JavaScript对象。
所谓"格式完好",就是要求指定的字符串必须符合严格的JSON格式,例如:属性名称必须加双引号、字符串值也必须用双引号。
通过上面这四种方式就可以像下面这样轻易的读取:
Alert(obj.name);
Alert(obj.sex);
注意:如果obj本来就是一个JSON对象,那么运用 eval()函数转换后(哪怕是多次转换)还是JSON对象,但是运用 parseJSON()函数处理后会抛出语法异常!
二、将JSON对象转化为JSON字符串
//将JSON对象转化为JSON字符
var last=obj.toJSONString();
或者
var last=JSON.stringify(obj); //将JSON对象转化为JSON字符
alert(last);
注意:上面的多个要领中,除了eval()函数是js自带的之外,其他的多个函数都来自json.js包。
新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个要领都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()要领,则说明您的json包版本太低。
上面讲的是前端json对象与字符串之间的相互转换,那么后台也需要传给前台相应的json形式的字符串,以便前台js解析读取!
// 将pojo对象转换成Json对象
JSONObject jsonObject = JSONObject.fromObject(object);
// 输出String字符串
return jsonObject.toString();
Java端使用的json包【json-lib-2.2.2.jar】,该包提供了各种类型转换为json对象的方法。主要用到了以下两个类: JSONObject, JSONArray