1.聲明,該實作參看了 http://www.blogjava.net/wuxufeng8080/articles/169035.html
2.Json-lib的使用依賴的jar包有:commons-lang.jar, commons-logging.jar,commons-beanutils.jar,
commons-collections.jar,xom-1.0-2005-01-05.jar, ezmorph-1.0.1.jar
3.實作代碼
package joe.json;
import java.beans.PropertyEditorSupport;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONObject;
import org.springframework.beans.BeanWrapperImpl;
import org.springframework.beans.MutablePropertyValues;
/**
* Json幫助類,提供Json字符串和Model類之間相互轉化的操作
* @author 黃少森 軟件開發部-斯凱文<br>
* @created in 2008-9-17 上午11:29:43
*/
public class JsonHelper {
/**
* 直接把Json字符串轉化成model對象List
* @param key 要獲得的對象Json對象數組的名稱
* @param jsonStr Json字符串
* @param model model類文件
* @return 返回一個Model類的列表
*/
public static List convertJson2Objects(String key , String jsonStr , Class model){
List modelList = new ArrayList();
JSONObject jo = JSONObject.fromObject(jsonStr);
List list = (List)jo.get(key);
if (list != null && list.size() > 0){
for(int i = 0 ; i < list.size() ; i ++){
BeanWrapperImpl bw = new BeanWrapperImpl(model);
bw.setPropertyValues(new MutablePropertyValues((Map)list.get(i)), true);
Object obj = bw.getWrappedInstance();
modelList.add(obj);
}
}
return modelList;
}
/**
* 直接把Json字符串轉化成model對象List (支持model裏含有子類型)
* @param key 要獲得的對象Json對象數組的名稱
* @param jsonStr Json字符串
* @param model model類文件
* @param childModel 子類型,是一個數組(model類裏的屬性有可能有多個類型 )
* @return 返回一個Model類的列表
*/
public static List convertJson2Objects(String key , String jsonStr , Class model , final Class [] childModel){
List modelList = new ArrayList();
JSONObject jo = JSONObject.fromObject(jsonStr);
List list = (List)jo.get(key);
if (list != null && list.size() > 0){
//先生成一個Bean映射的模板
if (childModel != null){
for(int i = 0 ; i < list.size() ; i ++){
BeanWrapperImpl bw = new BeanWrapperImpl(model);
for (int k = 0 ; k < childModel.length ; k ++){
final int j = k;
bw.registerCustomEditor(childModel[j], new PropertyEditorSupport(){
public void setValue(Object value) {
BeanWrapperImpl childBW = new BeanWrapperImpl(childModel[j]);
childBW.setPropertyValues(new MutablePropertyValues((Map)value), true);
super.setValue(childBW.getWrappedInstance());
}
});
}
bw.setPropertyValues(new MutablePropertyValues((Map)list.get(i)), true);
Object obj = bw.getWrappedInstance();
modelList.add(obj);
}
} else {
convertJson2Objects( key , jsonStr , model);
}
}
return modelList;
}
/**
* 把Json對象轉化成JavaModel(支持子類型的轉化)
* @param params 對象參數
* @param model 轉化的model類
* @param childModel 子類型,是一個數組(model類裏的屬性有可能有多個類型 )
* @return
*/
public static Object generateBean(Map params, Class model , final Class[] childModel) {
BeanWrapperImpl bw = new BeanWrapperImpl(model);
if (childModel != null){
for (int i = 0 ; i < childModel.length ; i ++){
final int j = i;
bw.registerCustomEditor(childModel[j], new PropertyEditorSupport(){
public void setValue(Object value) {
BeanWrapperImpl impl = new BeanWrapperImpl(childModel[j]);
impl.setPropertyValues(new MutablePropertyValues((Map)value), true);
super.setValue(impl.getWrappedInstance());
}
});
}
}
bw.setPropertyValues(new MutablePropertyValues(params), true);
return bw.getWrappedInstance();
}
/**
* 把Json對象轉化成JavaModel
* @param params 對象參數
* @param model 轉化的model類
* @return
*/
public static Object generateBean(Map params, Class model) {
BeanWrapperImpl bw = new BeanWrapperImpl(model);
bw.setPropertyValues(new MutablePropertyValues(params), true);
return bw.getWrappedInstance();
}
public static void main(String[] args) {
//String jsonStr = request.getParameter("data");
String jsonStr = "{list:[{id:'20',name:'dd'}]}";
List<Blog> blogList = JsonHelper.convertJson2Objects("list", jsonStr, Blog.class, new Class[]{Blog.class});
for (Blog b: blogList) {
System.out.println(b.getId()+","+ b.getName());
}
}
}