我有一个String格式的JSON数据。这个JSON数据来自JMS队列。 例如: -
String msg=" {"id":"4","item":"GOT","description":"hello"}";
我正在使用Gson库
将此JSON字符串转换为Corresponding类对象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可以是books表,也可以是具有格式为json的事务表
String msg=" {"id":"2","name":"deposit","purpose":"savings"}";
我想基于JSON字符串动态地将对象映射到相应的类。
例如:如果Transaction JSON将其发送到Transaction表,则Books JSON会将其发送到Books表。
我该怎么做?如果apache camel可以这样做,请告诉我如何接近? 任何方法都将不胜感激。
答案 0 :(得分:2)
首先使用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]
答案 1 :(得分:1)
您可以使用camel-jsonpath
检查JSON字符串是否包含某个字段:
<choice>
<when>
<jsonpath suppressExceptions="true">$.item</jsonpath>
<!-- Unmarshal to Book -->
</when>
<when>
<jsonpath suppressExceptions="true">$.name</jsonpath>
<!-- Unmarshal to Transaction -->
</when>
</choice>
答案 2 :(得分:0)
您可以尝试将此扩展程序检出驼峰 - JSON Schema Validator Component。它应该与camel中的原始验证器相同,但它允许您根据模式验证邮件正文。