кажется простым объектом типа сообщения, который не соответствует вашим требованиям?
если вы хотите преобразовать json в существующий и известный класс Java-бинов,
многие lib могутсделайте так, как
http://json -lib.sourceforge.net / apidocs / net / sf / json / class-use / JSONObject.html
JSONObject.toBean(JSONObject jsonObject, Class beanClass)
Creates a bean from a JSONObject, with a specific target class.
Кстати, если вы общаетесь с отдыхающим веб-сервисом, org.springframework.web.client.RestTemplate поможет вам получить прямой результат bean вместо json.
если класс не существует, вам нужна программа с java отражениеммеханизм. попробуйте использовать CGLIB, http://cglib.sourceforge.net/, динамически создать некоторый класс, например, BeanMap.я написал простой пример, но будьте осторожны, открыть байт класса сложно, и у вас могут возникнуть странные проблемы с JVM.Сильно не поощряйте это делать.
public static BeanMap generateBean(JSONObject json) {
BeanGenerator generator = new BeanGenerator();
Iterator keys = json.keys();
while (keys.hasNext()) {
Object key = keys.next();
Object value = json.get(key);
Class keyClass = guessValueClass(value);
generator.addProperty(key.toString(), keyClass);
}
Object result = generator.create();
BeanMap bean = BeanMap.create(result);
keys = json.keys();
while (keys.hasNext()) {
Object key = keys.next();
Object value = json.get(key);
bean.put(key, value);
}
return bean;
}
/**
* TODO fix guess
*/
static Class guessValueClass(Object value) {
try {
Integer.parseInt(value.toString());
return Integer.class;
} catch (NumberFormatException e1) {
}
try {
Double.parseDouble(value.toString());
return Double.class;
} catch (NumberFormatException e1) {
}
return String.class;
}