1.常用的json服务器端解析工具包是:net.sf.json和org.json,我并没有完整的去了解这2个包,每个包都有不同的特点。有时我们需要对前台传递进来的字符串数据在后台进行解析并转换成bean,这是,就不得不二者配合起来使用,因为net.sf.json是不能将json like的字符串解析成json对象的,而org.json却可以,但是后者却又不能将json对象转换成bean。所以二者配合可以解决这样的需求。我写的简单转换方法如下:
-
-
-
-
-
-
- @SuppressWarnings("unchecked")
- public static JSONObject strToJson(String target) throws JSONException{
- JSONObject result = new JSONObject();
- if(!JSONUtils.mayBeJSON(target)){
- throw new IllegalArgumentException("String:"+target+",is not likely a json formated string.");
- }
- else{
- org.json.JSONObject json = new org.json.JSONObject(target);
- Iterator iter = json.keys();
- while(iter.hasNext()){
- String key = iter.next();
- result.put(key, json.get(key));
- }
- }
- return result;
- }
最理想的结果是,前台传递到业务层的数据,就是可以直接持久化到数据库的数据,这样CRUD操作将会非常轻松。当然,这是一种比较笨的模拟Rails的ActiveRecord的方法了(导致视图层参杂了过多的业务逻辑,非常不安全的说)。
2.记住2个net.sf.json(这个包比org.json常用)类的实例的toString结果:
JSONArray实例toString()之后为:[["aaa", 222, 333, ...], [...], [...], [...]]
JSONObject实例toString()之后为:{"aaa": "111", "bbb": "222", ...}
结果字符串发送到前台之后只需要用eval方法去转换一下就行了.
当然实际使用中可以定义比较复杂的结构。