convertir objeto java a json
Frecuentes
Visto 2,284 veces
4
En Java tengo un objeto de este tipo. Map<Member, Map<CustomerVO, Set<Vehicle>>>
y otro List<DeviceOrder>
Quería convertir esto a json, probé con Gson pero está arrojando un error como "¿Olvidó registrar un adaptador de tipo?"
¿Puede alguien ayudarme con cómo procedo? Si no gson, ¿cuál sería otra forma de convertir?
El error anterior fue cuando probé de esta manera
List<DeviceOrder> devLst;
Gson gson = new Gson();
String jsonStr = gson.toJson(devLst);
para el otro como
Map<Member, Map<CustomerVO, Set<Vehicle>>> map;
Gson gson = new Gson();
String jsonStr = gson.toJson(map);
Por favor, hágame saber qué estoy haciendo mal. Más tarde quiero pasar esto a jsp para mostrar.
ACTUALIZACIÓN: Incluso lo intenté de esta manera también, pero no sirvió de nada.
Gson gson = new Gson();
Type type = new TypeToken<List<DeviceOrder>>(){}.getType();
String jsonstr = gson.toJson(devLst, type);
1 Respuestas
0
Puede probar la implementación estándar del API de Java para procesamiento JSON que es parte de J2EE.
Para tu List<DeviceOrder> devLst
, define el frijol:
public class DeviceOrder implements Serializable {
private static final long serialVersionUID = 893438341L;
public DeviceOrder() {
}
public DeviceOrder(int id, String desc, Date date) {
this.id = id;
this.desc = desc;
this.date = date;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((date == null) ? 0 : date.hashCode());
result = prime * result + ((desc == null) ? 0 : desc.hashCode());
result = prime * result + id;
return result;
}
private int id;
private String desc;
private Date date;
}
Y luego usa:
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<DeviceOrder> devLst = new ArrayList<DeviceOrder>() {
{
add(new DeviceOrder(1, "order 1", sdf.parse("2010-05-01")));
add(new DeviceOrder(2, "order 2", sdf.parse("2010-06-01")));
add(new DeviceOrder(3, "order 3", sdf.parse("2010-07-01")));
}
};
DeviceOrder[] devArr = devLst.toArray(new DeviceOrder[devLst.size()]);
JsonArrayBuilder devArrBuilder = Json.createArrayBuilder();
for (DeviceOrder devOrder : devArr) {
JsonObjectBuilder jsonObject = Json.createObjectBuilder()
.add("id", devOrder.getId())
.add("desc", devOrder.getDesc())
.add("date", sdf.format(devOrder.getDate()));
devArrBuilder.add(jsonObject);
}
JsonArray jsonArray = devArrBuilder.build();
Map<String, Object> prop = new HashMap<String, Object>() {
{
put(JsonGenerator.PRETTY_PRINTING, true);
}
};
JsonWriter jsonWriter = Json.createWriterFactory(prop).createWriter(System.out);
jsonWriter.writeArray(jsonArray);
jsonWriter.close();
La salida debe ser:
[
{
"id":1,
"desc":"order 1",
"date":"2010-05-01"
},
{
"id":2,
"desc":"order 2",
"date":"2010-06-01"
},
{
"id":3,
"desc":"order 3",
"date":"2010-07-01"
}
]
Tus Map<Member, Map<CustomerVO, Set<Vehicle>>> map
puede reducirse a un List
y JSONed de manera similar.
Respondido 03 Abr '14, 22:04
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java json gson or haz tu propia pregunta.
Fuerte sugerencia: considere usar javax.json en lugar de - FoggyDay