以下是原创作品,转载请标明出处http://lvjava.com/?p=390
json-lib是一个很方便的处理Java中JSON数据与普通数据转换的包,下载地址为:http://json-lib.sourceforge.net/
该包的运行依赖于下面的包:
jakarta commons-lang 2.5
jakarta commons-beanutils 1.8.0
jakarta commons-collections 3.2.1
jakarta commons-logging 1.1.1
ezmorph 1.0.6
JSONObject 将值对作为对象的方式管理
JSONArray 对应值对数组
JSONFunction 用来处理Javascript方法
直接上示例代码:
后台端代码(基于Spring)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
@Controller
@RequestMapping
(
"/json"
)
public
class
JSONController {
@ResponseBody
@RequestMapping
(method = RequestMethod.GET)
public
String getJSONTest() {
JSONObject obj =
new
JSONObject();
obj.put(
"jsonKey"
,
"jsonValue"
);
JSONArray array =
new
JSONArray();
JSONObject obj1 =
new
JSONObject();
obj1.put(
"arrayValue"
,
"Array Value 1"
);
array.add(obj1);
JSONObject obj2 =
new
JSONObject();
obj2.put(
"arrayValue"
,
"Array Value 2"
);
array.add(obj2);
obj.put(
"jsonArray"
, array);
obj.put(
"jsonFunction"
,
new
JSONFunction(
"alert('JSON Functin Test');"
));
obj.put(
"jsonFunctionWithParams"
,
new
JSONFunction(
new
String[] {
"param1"
,
"param2"
},
"alert(param1 + ' + ' + param2); return param1 + ' * ' + param2;"
));
return
obj.toString();
}
public
static
void
main(String[] args) {
JSONObject obj =
new
JSONObject();
obj.put(
"jsonKey"
,
"jsonValue"
);
obj.put(
"jsonFunction"
,
new
JSONFunction(
"alert('JSON Functin Test');"
));
System.out.println(obj.toString());
}
}
|
返回给前台的数据如下:
{“jsonFunctionWithParams”:function(param1,param2){ alert(param1 + ‘ + ‘ + param2); return param1 + ‘ * ‘ + param2; },”jsonFunction”:function(){ alert(‘JSON Functin Test’); },”jsonKey”:”jsonValue”,”jsonArray”:[{"arrayValue":"Array Value 1"},{"arrayValue":"Array Value 2"}]}
前台代码(基于JQuery)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$(document).ready(
function
(){
$.get(
'json.do'
,
function
(data) {
var
jsonObj = eval(
'('
+ data +
')'
);
alert(jsonObj.jsonKey);
alert(jsonObj.jsonArray.length);
for
(
var
i = 0; i < jsonObj.jsonArray.length; i++) {
alert(jsonObj.jsonArray[i].arrayValue);
}
jsonObj.jsonFunction();
setTimeout(jsonObj.jsonFunction, 1000);
jsonObj.jsonFunctionWithParams(
'param3'
,
'param4'
);
alert(jsonObj.jsonFunctionWithParams(
'param3'
,
'param4'
));
});
});
|
重点解释一下JsonFunction,该对象有两个构造函数:
JSONFunction(String text)
Constructs a JSONFunction with no parameters.
JSONFunction(String[] params, String text)
Constructs a JSONFunction with parameters.
参数text为函数的主体部分,即一个函数大括号内部的部分(不包括大括号)。
当JSON数据中不包含JSONFunction的时候,可以使用JQuery提供的简易方法来处理:
1
2
3
4
5
|
$(document).ready(
function
() {
$.getJSON(
'json.do'
,
function
(data) {
alert(data.jsonKey);
});
});
|
但是当JSON数据中有JSONFunction对应的数据存在时,JQuery不能正确解析。alert函数并不会被执行。