Преобразовать Java-объект в JSON
В Java у меня есть объект такого типа Map<Member, Map<CustomerVO, Set<Vehicle>>>
и еще один List<DeviceOrder>
Я хотел преобразовать это в JSON, я пытался с Gson, но выдает ошибку как "Забыли зарегистрировать адаптер типа?"
Может кто-нибудь, пожалуйста, помогите, как я поступаю, если не GSON, что бы другой способ конвертировать.
Выше ошибка была, когда я попробовал этот путь
List<DeviceOrder> devLst;
Gson gson = new Gson();
String jsonStr = gson.toJson(devLst);
для другого как
Map<Member, Map<CustomerVO, Set<Vehicle>>> map;
Gson gson = new Gson();
String jsonStr = gson.toJson(map);
Пожалуйста, дайте мне знать, что я делаю не так. Позже я хочу передать это в JSP для отображения.
ОБНОВЛЕНИЕ: Даже попробовал этот способ также, но бесполезно.
Gson gson = new Gson();
Type type = new TypeToken<List<DeviceOrder>>(){}.getType();
String jsonstr = gson.toJson(devLst, type);
1 ответ
Вы можете попробовать стандартную реализацию Java API для обработки JSON, которая является частью J2EE.
Для тебя List<DeviceOrder> devLst
Определите бин:
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;
}
А затем используйте:
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();
Выход должен быть:
[
{
"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"
}
]
Ваш Map<Member, Map<CustomerVO, Set<Vehicle>>> map
может быть уменьшен до List
и JSONed аналогичным образом.