日期:2014-05-16  浏览次数:20319 次

JSON初步总结

json的确是一个非常方便的轻便的数据交换格式,最近项目中使用,使我深有体会。现在把工作中总结和学到的几个点归纳到一起。
1.常用的json服务器端解析工具包是:net.sf.json和org.json,我并没有完整的去了解这2个包,每个包都有不同的特点。有 时我们需要对前台传递进来的字符串数据在后台进行解析并转换成bean,这是,就不得不二者配合起来使用,因为net.sf.json是不能将json like的字符串解析成json对象的,而org.json却可以,但是后者却又不能将json对象转换成bean。所以二者配合可以解决这样的需求。我 写的简单转换方法如下:

Java代码 ?收藏代码
  1. /** ?
  2. ?????*?将json?like字符串转换成net.sf.json.JSONObject对象 ?
  3. ?????*?@param?target ?
  4. ?????*?@return ?
  5. ?????*?@throws?JSONException ?
  6. ?????*/ ??
  7. ????@SuppressWarnings ( "unchecked" )??
  8. ????public ? static ?JSONObject?strToJson(String?target)? throws ?JSONException{??
  9. ????????JSONObject?result?=?new ?JSONObject();??
  10. ????????if (!JSONUtils.mayBeJSON(target)){??
  11. ????????????throw ? new ?IllegalArgumentException( "String:" +target+ ",is?not?likely?a?json?formated?string." );??
  12. ????????}??
  13. ????????else {??
  14. ????????????org.json.JSONObject?json?=?new ?org.json.JSONObject(target);??
  15. ????????????Iterator<String>?iter?=?json.keys();??
  16. ????????????while (iter.hasNext()){??
  17. ????????????????String?key?=?iter.next();??
  18. ????????????????result.put(key,?json.get(key));??
  19. ????????????}??
  20. ????????}??
  21. ????????return ?result;??
  22. ????}??
/**
	 * 将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方法去转换一下就行了.
当然实际使用中可以定义比较复杂的结构。