convertir objeto java a json

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);

preguntado el 22 de mayo de 12 a las 17:05

Fuerte sugerencia: considere usar javax.json en lugar de -

1 Respuestas

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 or haz tu propia pregunta.