【发布时间】:2018-04-11 08:40:40
【问题描述】:
我有一个字符串格式的 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 可以做到这一点,请告诉如何处理? 任何方法都将不胜感激。
【问题讨论】:
-
没关系,忽略我的回答,我才意识到这与你的问题无关。
-
你不能根据你的消息来源做一个简单的
if()else吗?我认为你有类似String msg = someDBHandler.doThings()的东西?如果你不能这样做,你也许可以简单地扫描你的 json 以获得唯一的键,但我不推荐这样做。例如JSONObject obj = new JSONObject(msg); if(obj.has('purpose')) { // Do TransactionTable things } else if(obj.has('item')) { // Do BookTable things } -
是的,但我提到的用例是一个简单的用例。如果有数百个表,每个表有多个列怎么办。匹配每一列不会有效率。
-
好吧,这更难处理,如果您返回了一个基本类型为
?的对象,那么以后您将如何处理这个问题?我可以想象像Object j = g.fromJson(msg, Class.forName('some.package.identifierFromMessageOrSomething'));这样的东西,但从长远来看它可能没有多大帮助。
标签: java json apache-camel gson jms