java - 将json数据映射到对应的Class

标签 java json apache-camel gson jms

我有一个字符串格式的 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/

相关文章:

java - JPA/hibernate 需要帮助 - 创建实体类的问题

java - ThreadPoolExecutor 没有预定义的饱和策略吗?

java - JScrollPane 中的 JEditorPane 具有修复背景图像

java - Apache Camel 使用 HttpEndpoint 选项和 http4

java - 从非 Camel 组件向 Camel 组件发送消息的最佳方式是什么?

使用 JPA 和 Rest API 进行 Java 序列化

c# - 删除 json 字符串中的尾随空格 C#

r - 使用 FileInput Shiny App 上传 Json 文件

rest - Camel Rest DSL 检索 HTTP POST 多部分文件

android - 使用 Base64 编码的图像字符串将 Json 数据发送到服务器时出错