¿Cómo encapsular datos en un paquete JSON en Java?
importar?java.io.IOException;
importar?java.util.ArrayList;
importar?java.util.ArrayList;
importar?java.util.Collection;
importar?java.util.HashMap;
importar?java.util.Iterator;
importar ?java.util.List;
importar?java.util.Map;
importar?javax.servlet.mons.beanutils.BeanUtils;
¿importar? BeanUtils;
importar?org.apache.struts2.ServletActionContext;
importar?com.opensymphony.xwork2.ActionContext;
¿clase pública?JSONUtils p> p>
{
/**
*?
*?@autor?wangwei?JSONUtils
* ?@ param?lt;Tgt;
*?
*/
/***
*?Serializar el objeto Lista como texto JSON
*/
public?static?lt;Tgt;?String?toJSONString(Listlt;Tgt;?list)
{
JSONArray?jsonArray ?=?JSONArray.fromObject(lista);
return?jsonArray.toString();
}
/** *
*?Serializar el objeto en texto JSON
*?@param?object
*?@return
*/
public?static?String?toJSONString(Object?object)
{
JSONArray?jsonArray?=?JSONArray.fromObject( object);
return?jsonArray.toString();
}
/***
*?Serializar matriz de objetos JSON en texto JSON
p>*?@param?jsonArray
*?@return
*/
public?static?String?toJSONString(JSONArray?jsonArray)
{
return?jsonArray.toString();
}
/***
* ?Serializar objeto JSON a texto JSON
*?@param?jsonObject
*?@return
*/
public ?static ?Calle
ring?toJSONString(JSONObject?jsonObject)
{
return?jsonObject.toString();
}?
/** *
*?Convertir el objeto en un objeto de lista
*?@param?object
*?@return
*/
public?static?List?toArrayList(Object?object)
{
List?arrayList?=?new?ArrayList();
JSONArray?jsonArray?=?JSONArray.fromObject(objeto);
Iterador?it?=?jsonArray.iterator();
mientras?(it.hasNext() )
{
JSONObject?jsonObject?=?(JSONObject)?it.next();
Iterador?keys?=?jsonObject.keys()
mientras?(keys.hasNext())
{
Objeto?key?=?keys.next ();
¿Objeto?valor?=?jsonObject.get(clave);
arrayList.add(valor);
}
}
return?arrayList;
}
*?Convertir el objeto JSON en un objeto del tipo entrante
*?@param?lt;Tgt;
*?@param?jsonObject
*?@param?beanClass
*?@return
*/
public?static?lt;Tgt;?T?toBean(JSONObject?jsonObject,?Classlt;Tgt;?beanClass)
{
return?(T)?JSONObject. toBean( jsonObject,?beanClass);
}
/***
*?convertirá el objeto en un objeto del tipo entrante
*?@param?lt;Tgt;
*?@param?object
*?@param?beanClass
*?@return
*/
public?static?lt;Tgt;?T?toBean(Object?object,?Classlt;Tgt;?beanClass)
{
JSONObject?jsonObject?=?JSONObject.fromObject(objeto);
retorno?(T)?JSONObject.toBean(jsonObject,?beanClass);
}
/***
*?Deserializar texto JSON en una entidad con una relación maestro-detalle
*?@param?lt;Tgt;?Universal Representación T Tipo de entidad principal <
/p>
*?@param?lt;Dgt;? La D genérica representa el tipo de entidad subordinada
*?@param?jsonString?Texto JSON
*?@param ? mainClass?Tipo de entidad maestra
*?@param?detailName?El nombre del atributo de la clase de entidad esclava en la clase de entidad principal
*?@param?detailClass?Tipo de entidad esclava
*?Return
*/
public?static?lt;T,?Dgt;?T?toBean(String?jsonString,?Classlt;Tgt ;?mainClass,
String?detailName,?Classlt;Dgt;?detailClass)
{
JSONObject?jsonObject?=?JSONObject.fromObject(jsonString) ;
JSONArray?jsonArray?=?(JSONArray)?jsonObject.get(detailName);
T?mainEntity?=?JSONUtils.toBean(jsonObject,?mainClass); p>
Listlt;Dgt;?detailList?=?JSONUtils.toList(jsonArray,?detailClass);
prueba
{
BeanUtils.setProperty (mainEntity,? DetailName,?DetailList);
T?detailName, DetailList);
}
catch(Exception?ex)
{
throw?new?RuntimeException("¡Error al deserializar la entidad para la relación maestro-esclavo JSON!") )
}
return?mainEntity;
}
/***
*?Deserializar texto JSON en entidades para lograr una relación maestro-esclavo
*?@param ? lt; Tgt; T genérico representa el tipo de entidad principal
*?@param?lt; ; D2gt; D2 genérico representa el tipo de entidad subordinada
*?@param?jsonString?Texto JSON
*?@param?mainClass?Tipo de entidad maestra
* ?@param?detailName1?Atributos de la clase de entidad esclava en la clase de entidad maestra
*?@param?detailClass1?Tipo de entidad esclava
*?@param?detailName2? En la clase de entidad maestra Atributos de las clases de entidad subordinadas
*?@param?detailClass2?Tipo de entidad esclava
*?@return
*/
público ?static?lt;T,?D1,?D2gt;?T?toBean(String?jso
nString,?Classlt;Tgt;?mainClass,
String?detailName1,?Classlt;D1gt;?detailClass1,?String?detailName2,
Classlt;D2gt;?detailClass2) p>
{
JSONObject?jsonObject?=?JSONObject.fromObject(jsonString);
JSONArray?jsonArray1?=?(JSONArray)?jsonObject.get(detailName1);
JSONArray?jsonArray2?=?(JSONArray)?jsonObject.get(detailName2);
T?toList(jsonArray1,?detailClass1);
Listlt; D2gt;?detailList2?=?JSONUtils.toList(jsonArray2,?detailClass2);
prueba
{
BeanUtils.setProperty(mainEntity,?detailName1,? DetailList1);
BeanUtils.setProperty(mainEntity,?detailName2,?detailList2);
}
captura?(Exception?ex)
{
throw?new?RuntimeException("¡Error en la deserialización JSON maestro-esclavo de la entidad!") )
}
return?mainEntity; p> p>
}
/***
*?Deserializar texto JSON en entidades maestro-detalle
*?@param?lt; Tgt; T genérico representa el tipo de entidad principal
*?@param?lt; D1gt genérico representa el tipo de entidad subordinada
*?@param?lt; ¿D2 genérico representa el tipo de entidad subordinada
*?@param?jsonString?Texto JSON
*?@param?mainClass?Tipo de entidad maestra
*? @ param?detailName1?Atributos de la clase de entidad esclava en la clase de entidad maestra
*?@param?detailClass1?Tipo de entidad esclava
*?@param?detailName2?Master Entidad esclava en la clase de entidad Atributos de la clase
*?@param?detailClass2?Tipo de entidad esclava
*?@param?detailName3?master Atributos de la clase de entidad subordinada en la clase de entidad
*?@param?detailClass3?Tipo de entidad esclava
*?Return
*/
public?static?lt;T ,?D1,?D2, ?D3gt;?T?toBean(String?jsonString,
Classlt;Tgt;?mainClass,?Str
ing?detailName1,?Classlt;D1gt;?detailClass1,
Cadena?detailName2,?Classlt;D2gt;?detailClass2,?String?detailName3,
Classlt;D3gt;?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?toList(jsonArray1,?detailClass1);
Listlt;D2gt;?detailList2?=?JSONUtils.toList(jsonArray2,?detailClass2);
Listlt;D3gt;?detailList3?toList(jsonArray3,?detailClass3);
prueba
{
BeanUtils.setProperty(mainEntity,?detailName1,?detailList1) ;
BeanUtils.setProperty(mainEntity,?detailName2,detailList2);
BeanUtils.setProperty(mainEntity,?detailName3,?detailList3);
} p> p>
catch(Exception?ex)
{
throw?new?RuntimeException("¡La entidad de deserialización JSON de relación maestro-esclavo falló!") )
}
return?mainEntity;
}
/***
*?Deserializar texto JSON en principal Detallado entidad
*?@param?lt;Tgt;?Tipo de entidad maestra
*?@param?jsonString?Texto JSON
*?@param? ?Tipo de entidad principal
*?@param?detailClass?Almacenar los nombres y tipos de múltiples atributos de entidad subordinada en la entidad principal
*?Return
* /
public?static?lt;Tgt;?T?toBean(String?jsonString,?Classlt;Tgt;?mainClass,
HashMaplt;String,?Classgt;?detailClass)
{
JSONObject?jsonObject?=?JSONObject.
fromObject(jsonString);
T?mainEntity?=?JSONUtils.toBean(jsonObject,?mainClass);
para?(Object?key?:?detailClass.keySet())
{
probar
{
¿Clase?valor?=?(clase)?detailClass.get(clave); p>
p>
BeanUtils.setProperty(mainEntity,?key.toString(),?value);
}
catch?(Exception?ex)
{
catch? p>
{
throw?new?RuntimeException("¡Error en la entidad de deserialización JSON de la relación maestro-esclavo!" ) )
}
}
return?mainEntity;
}
/**
* ?Encapsular datos json transmitidos desde segundo plano
*?@param?obj
*/
public?static?void?outPutJson( Objeto?obj){
ActionContext?context?=?ActionContext.getContext();
HttpServletResponse?response?=?(HttpServletResponse)?context.get(ServletActionContext.HTTP_RESPONSE);
¿intentar?{
response.getWriter().print(obj);
}? ¿captura?(IOException?e)?{
e.printStackTrace();
}
}
}
}
// Clase de prueba
String?s1?=?"[{id:1,?pId:0,?name:\"test1\"? ,?open:true}]";?
Cadena? {id: 2,?pId: 1,?nombre:\"test211\"?,?open: true}";?
Cadena?{id: 3,?pId: 2,?nombre: \"test311\"?,?open: true}";?
Cadena?{id: 4,?pId: 1,?nombre:\"test411\"?,? open: true}" ;
Listlt;Stringgt;?listZtree?=?new?ArrayListlt;Stringgt;();
listZtree.add(s1);
listZtree.
listZtree.add(s2);
listZtree.add(s3);
listZtree.add(s4);
System.out.println(JSONUtils.toJSONString(listaZ
árbol));
}