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

来源:互联网 发布:憨豆特工影评知乎 编辑:程序博客网 时间:2024/05/29 19:32

以下是原创作品,转载请标明出处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")
publicclass JSONController {
     
    @ResponseBody
    @RequestMapping(method = RequestMethod.GET)
    publicString getJSONTest() {
        JSONObject obj = newJSONObject();
        obj.put("jsonKey","jsonValue");
         
        JSONArray array = newJSONArray();
        JSONObject obj1 = newJSONObject();
        obj1.put("arrayValue","Array Value 1");
        array.add(obj1);
        JSONObject obj2 = newJSONObject();
        obj2.put("arrayValue","Array Value 2");
        array.add(obj2);
        obj.put("jsonArray", array);
         
        obj.put("jsonFunction",newJSONFunction("alert('JSON Functin Test');"));
        obj.put("jsonFunctionWithParams",newJSONFunction(newString[] { "param1","param2"}, "alert(param1 + ' + ' + param2); return param1 + ' * ' + param2;"));
        returnobj.toString();
    }
     
    publicstatic void main(String[] args) {
        JSONObject obj = newJSONObject();
        obj.put("jsonKey","jsonValue");
        obj.put("jsonFunction",newJSONFunction("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) {
        varjsonObj = eval('('+ data + ')');
        alert(jsonObj.jsonKey);
         
        alert(jsonObj.jsonArray.length);
        for(vari = 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函数并不会被执行。

0 0
原创粉丝点击