java中將數據封裝為JSON包,可以使用java提供的jsonArray這個工具類進行轉換,代碼如下:
package?com.json;import?java.io.IOException;
import?java.util.ArrayList;
import?java.util.Collection;
import?java.util.HashMap;
import?java.util.Iterator;
import?java.util.List;
import?java.util.Map;
import?javax.servlet.mons.beanutils.BeanUtils;
import?org.apache.struts2.ServletActionContext;
import?com.opensymphony.xwork2.ActionContext;
public?class?JSONUtils
{
/**
*?
*?@author?wangwei?JSON工具類
*?@param?<T>
*?
*/
/***
*?將List對象序列化為JSON文本
*/
public?static?<T>?String?toJSONString(List<T>?list)
{
JSONArray?jsonArray?=?JSONArray.fromObject(list);
return?jsonArray.toString();
}
/***
*?將對象序列化為JSON文本
*?@param?object
*?@return
*/
public?static?String?toJSONString(Object?object)
{
JSONArray?jsonArray?=?JSONArray.fromObject(object);
return?jsonArray.toString();
}
/***
*?將JSON對象數組序列化為JSON文本
*?@param?jsonArray
*?@return
*/
public?static?String?toJSONString(JSONArray?jsonArray)
{
return?jsonArray.toString();
}
/***
*?將JSON對象序列化為JSON文本
*?@param?jsonObject
*?@return
*/
public?static?String?toJSONString(JSONObject?jsonObject)
{
return?jsonObject.toString();
}?
/***
*?將對象轉換為List對象
*?@param?object
*?@return
*/
public?static?List?toArrayList(Object?object)
{
List?arrayList?=?new?ArrayList();
JSONArray?jsonArray?=?JSONArray.fromObject(object);
Iterator?it?=?jsonArray.iterator();
while?(it.hasNext())
{
JSONObject?jsonObject?=?(JSONObject)?it.next();
Iterator?keys?=?jsonObject.keys();
while?(keys.hasNext())
{
Object?key?=?keys.next();
Object?value?=?jsonObject.get(key);
arrayList.add(value);
}
}
return?arrayList;
}
/***
*?將對象轉換為Collection對象
*?@param?object
*?@return
*/
public?static?Collection?toCollection(Object?object)
{
JSONArray?jsonArray?=?JSONArray.fromObject(object);
return?JSONArray.toCollection(jsonArray);
}
/***
*?將對象轉換為JSON對象數組
*?@param?object
*?@return
*/
public?static?JSONArray?toJSONArray(Object?object)
{
return?JSONArray.fromObject(object);
}
/***
*?將對象轉換為JSON對象
*?@param?object
*?@return
*/
public?static?JSONObject?toJSONObject(Object?object)
{
return?JSONObject.fromObject(object);
}
/***
*?將對象轉換為HashMap
*?@param?object
*?@return
*/
public?static?HashMap?toHashMap(Object?object)
{
HashMap<String,?Object>?data?=?new?HashMap<String,?Object>();
JSONObject?jsonObject?=?JSONUtils.toJSONObject(object);
Iterator?it?=?jsonObject.keys();
while?(it.hasNext())
{
String?key?=?String.valueOf(it.next());
Object?value?=?jsonObject.get(key);
data.put(key,?value);
}
return?data;
}
/***
*?將對象轉換為List<Map<String,Object>>
*?@param?object
*?@return
*/
//?返回非實體類型(Map<String,Object>)的List
public?static?List<Map<String,?Object>>?toList(Object?object)
{
List<Map<String,?Object>>?list?=?new?ArrayList<Map<String,?Object>>();
JSONArray?jsonArray?=?JSONArray.fromObject(object);
for?(Object?obj?:?jsonArray)
{
JSONObject?jsonObject?=?(JSONObject)?obj;
Map<String,?Object>?map?=?new?HashMap<String,?Object>();
Iterator?it?=?jsonObject.keys();
while?(it.hasNext())
{
String?key?=?(String)?it.next();
Object?value?=?jsonObject.get(key);
map.put((String)?key,?value);
}
list.add(map);
}
return?list;
}
/***
*?將JSON對象數組轉換為傳入類型的List
*?@param?<T>
*?@param?jsonArray
*?@param?objectClass
*?@return
*/
public?static?<T>?List<T>?toList(JSONArray?jsonArray,?Class<T>?objectClass)
{
return?JSONArray.toList(jsonArray,?objectClass);
}
/***
*?將對象轉換為傳入類型的List
*?@param?<T>
*?@param?jsonArray
*?@param?objectClass
*?@return
*/
public?static?<T>?List<T>?toList(Object?object,?Class<T>?objectClass)
{
JSONArray?jsonArray?=?JSONArray.fromObject(object);
return?JSONArray.toList(jsonArray,?objectClass);
}
/***
*?將JSON對象轉換為傳入類型的對象
*?@param?<T>
*?@param?jsonObject
*?@param?beanClass
*?@return
*/
public?static?<T>?T?toBean(JSONObject?jsonObject,?Class<T>?beanClass)
{
return?(T)?JSONObject.toBean(jsonObject,?beanClass);
}
/***
*?將將對象轉換為傳入類型的對象
*?@param?<T>
*?@param?object
*?@param?beanClass
*?@return
*/
public?static?<T>?T?toBean(Object?object,?Class<T>?beanClass)
{
JSONObject?jsonObject?=?JSONObject.fromObject(object);
return?(T)?JSONObject.toBean(jsonObject,?beanClass);
}
/***
*?將JSON文本反序列化為主從關系的實體
*?@param?<T>?泛型T?代表主實體類型
*?@param?<D>?泛型D?代表從實體類型
*?@param?jsonString?JSON文本
*?@param?mainClass?主實體類型
*?@param?detailName?從實體類在主實體類中的屬性名稱
*?@param?detailClass?從實體類型
*?@return
*/
public?static?<T,?D>?T?toBean(String?jsonString,?Class<T>?mainClass,
String?detailName,?Class<D>?detailClass)
{
JSONObject?jsonObject?=?JSONObject.fromObject(jsonString);
JSONArray?jsonArray?=?(JSONArray)?jsonObject.get(detailName);
T?mainEntity?=?JSONUtils.toBean(jsonObject,?mainClass);
List<D>?detailList?=?JSONUtils.toList(jsonArray,?detailClass);
try
{
BeanUtils.setProperty(mainEntity,?detailName,?detailList);
}
catch?(Exception?ex)
{
throw?new?RuntimeException("主從關系JSON反序列化實體失敗!");
}
return?mainEntity;
}
/***
*?將JSON文本反序列化為主從關系的實體
*?@param?<T>泛型T?代表主實體類型
*?@param?<D1>泛型D1?代表從實體類型
*?@param?<D2>泛型D2?代表從實體類型
*?@param?jsonString?JSON文本
*?@param?mainClass?主實體類型
*?@param?detailName1?從實體類在主實體類中的屬性
*?@param?detailClass1?從實體類型
*?@param?detailName2?從實體類在主實體類中的屬性
*?@param?detailClass2?從實體類型
*?@return
*/
public?static?<T,?D1,?D2>?T?toBean(String?jsonString,?Class<T>?mainClass,
String?detailName1,?Class<D1>?detailClass1,?String?detailName2,
Class<D2>?detailClass2)
{
JSONObject?jsonObject?=?JSONObject.fromObject(jsonString);
JSONArray?jsonArray1?=?(JSONArray)?jsonObject.get(detailName1);
JSONArray?jsonArray2?=?(JSONArray)?jsonObject.get(detailName2);
T?mainEntity?=?JSONUtils.toBean(jsonObject,?mainClass);
List<D1>?detailList1?=?JSONUtils.toList(jsonArray1,?detailClass1);
List<D2>?detailList2?=?JSONUtils.toList(jsonArray2,?detailClass2);
try
{
BeanUtils.setProperty(mainEntity,?detailName1,?detailList1);
BeanUtils.setProperty(mainEntity,?detailName2,?detailList2);
}
catch?(Exception?ex)
{
throw?new?RuntimeException("主從關系JSON反序列化實體失敗!");
}
return?mainEntity;
}
/***
*?將JSON文本反序列化為主從關系的實體
*?@param?<T>泛型T?代表主實體類型
*?@param?<D1>泛型D1?代表從實體類型
*?@param?<D2>泛型D2?代表從實體類型
*?@param?jsonString?JSON文本
*?@param?mainClass?主實體類型
*?@param?detailName1?從實體類在主實體類中的屬性
*?@param?detailClass1?從實體類型
*?@param?detailName2?從實體類在主實體類中的屬性
*?@param?detailClass2?從實體類型
*?@param?detailName3?從實體類在主實體類中的屬性
*?@param?detailClass3?從實體類型
*?@return
*/
public?static?<T,?D1,?D2,?D3>?T?toBean(String?jsonString,
Class<T>?mainClass,?String?detailName1,?Class<D1>?detailClass1,
String?detailName2,?Class<D2>?detailClass2,?String?detailName3,
Class<D3>?detailClass3)
{
JSONObject?jsonObject?=?JSONObject.fromObject(jsonString);
JSONArray?jsonArray1?=?(JSONArray)?jsonObject.get(detailName1);
JSONArray?jsonArray2?=?(JSONArray)?jsonObject.get(detailName2);
JSONArray?jsonArray3?=?(JSONArray)?jsonObject.get(detailName3);
T?mainEntity?=?JSONUtils.toBean(jsonObject,?mainClass);
List<D1>?detailList1?=?JSONUtils.toList(jsonArray1,?detailClass1);
List<D2>?detailList2?=?JSONUtils.toList(jsonArray2,?detailClass2);
List<D3>?detailList3?=?JSONUtils.toList(jsonArray3,?detailClass3);
try
{
BeanUtils.setProperty(mainEntity,?detailName1,?detailList1);
BeanUtils.setProperty(mainEntity,?detailName2,?detailList2);
BeanUtils.setProperty(mainEntity,?detailName3,?detailList3);
}
catch?(Exception?ex)
{
throw?new?RuntimeException("主從關系JSON反序列化實體失敗!");
}
return?mainEntity;
}
/***
*?將JSON文本反序列化為主從關系的實體
*?@param?<T>?主實體類型
*?@param?jsonString?JSON文本
*?@param?mainClass?主實體類型
*?@param?detailClass?存放了多個從實體在主實體中屬性名稱和類型
*?@return
*/
public?static?<T>?T?toBean(String?jsonString,?Class<T>?mainClass,
HashMap<String,?Class>?detailClass)
{
JSONObject?jsonObject?=?JSONObject.fromObject(jsonString);
T?mainEntity?=?JSONUtils.toBean(jsonObject,?mainClass);
for?(Object?key?:?detailClass.keySet())
{
try
{
Class?value?=?(Class)?detailClass.get(key);
BeanUtils.setProperty(mainEntity,?key.toString(),?value);
}
catch?(Exception?ex)
{
throw?new?RuntimeException("主從關系JSON反序列化實體失敗!");
}
}
return?mainEntity;
}
/**
*?封裝json數據從後臺傳輸
*?@param?obj
*/
public?static?void?outPutJson(Object?obj){
ActionContext?context?=?ActionContext.getContext();
HttpServletResponse?response?=?(HttpServletResponse)?context.get(ServletActionContext.HTTP_RESPONSE);
try?{
response.getWriter().print(obj);
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
//測試類
String?s1?=?"[{id:1,?pId:0,?name:\"test1\"?,?open:true}]";?
String?s2?=?"{id:2,?pId:1,?name:\"test211\"?,?open:true}";?
String?s3?=?"{id:3,?pId:2,?name:\"test311\"?,?open:true}";?
String?s4?=?"{id:4,?pId:1,?name:\"test411\"?,?open:true}";
List<String>?listZtree?=?new?ArrayList<String>();
listZtree.add(s1);
listZtree.add(s2);
listZtree.add(s3);
listZtree.add(s4);
System.out.println(JSONUtils.toJSONString(listZtree));
}