我有一个字符串格式的 JSON 数据。此 JSON 数据来自 JMS 队列。 例如:-
String msg=" {"id":"4","item":"GOT","description":"hello"}";
我正在使用 Gson 库将此 JSON 字符串转换为相应的类对象
Gson g = new Gson();
BooksTable b1 = g.fromJson(msg, BooksTable.class); //BooksTable is a POJO class with getter setters
addBook(b1); //used to insert object into the database Books table
现在的问题是,这个 json 可以是书籍表,也可以是交易表,其中的 json 格式为
String msg=" {"id":"2","name":"deposit","purpose":"savings"}";
我想根据JSON字符串动态地将对象映射到相应的类。
例如:如果 Books JSON 出现,则将其发送到 Books 表;如果 Transaction JSON 出现,则将其发送到 Transaction 表。
我怎样才能做到这一点?如果 apache Camel 可以做到这一点,请告诉如何处理? 任何方法将不胜感激。
最佳答案
首先使用 JsonParser
解析 JSON ,这样您就可以检查它,然后使用 Gson
解码到适当的对象类型。 .
public class Test {
public static void main(String[] args) {
process("{\"id\":\"4\",\"item\":\"GOT\",\"description\":\"hello\"}");
process("{\"id\":\"2\",\"name\":\"deposit\",\"purpose\":\"savings\"}");
}
private static void process(String json) {
JsonObject object = new JsonParser().parse(json).getAsJsonObject();
if (object.has("item")) {
Book book = new Gson().fromJson(object, Book.class);
System.out.println(book);
} else if (object.has("name")) {
Transaction transaction = new Gson().fromJson(object, Transaction.class);
System.out.println(transaction);
} else {
System.out.println("Unknown JSON: " + json);
}
}
}
class Book {
private int id;
private String item;
private String description;
@Override
public String toString() {
return "Book[id=" + this.id +
", item=" + this.item +
", description=" + this.description + "]";
}
}
class Transaction {
private int id;
private String name;
private String purpose;
@Override
public String toString() {
return "Transaction[id=" + this.id +
", name=" + this.name +
", purpose=" + this.purpose + "]";
}
}
输出
Book[id=4, item=GOT, description=hello]
Transaction[id=2, name=deposit, purpose=savings]
关于java - 将json数据映射到对应的Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49770414/