json的确是一个非常方便的轻便的数据交换格式,最近项目中使用,使我深有体会。现在把工作中总结和学到的几个点归纳到一起。
1.常用的json服务器端解析工具包是:net.sf.json和org.json,我并没有完整的去了解这2个包,每个包都有不同的特点。有 时我们需要对前台传递进来的字符串数据在后台进行解析并转换成bean,这是,就不得不二者配合起来使用,因为net.sf.json是不能将json like的字符串解析成json对象的,而org.json却可以,但是后者却又不能将json对象转换成bean。所以二者配合可以解决这样的需求。我 写的简单转换方法如下:
- /**
- * 将json like字符串转换成net.sf.json.JSONObject对象
- * @param target
- * @return
- * @throws JSONException
- */
- @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<String> iter = json.keys();
- while (iter.hasNext()){
- String key = iter.next();
- result.put(key, json.get(key));
- }
- }
- return result;
- }
/**
* 将json like字符串转换成net.sf.json.JSONObject对象
* @param target
* @return
* @throws JSONException
*/
@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<String> 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方法去转换一下就行了.
当然实际使用中可以定义比较复杂的结构。