json-lib.jar使用方法详解(动态从后台获取Javascript函数)

以下是原创作品,转载请标明出处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函数并不会被执行。

你可能感兴趣的:(json-lib.jar使用方法详解(动态从后台获取Javascript函数))