Java / JSON - 通用反序列化器

时间:2016-01-12 04:45:36

标签: java json gson generalization

我想要实现的目标是:

  • 我们有一个JSON对象流。
  • 我想从JSON重构一个Java对象。
  • 我想应用转换(比如改变 字符串的格式,如果满足某些条件,则拒绝对象 ' isToBeConsumed' == false并且可能将层叠从嵌套变为线性)
  • 我希望能够将JSON对象的值存储到数据库中。

当有新类型的JSON对象流进入时,我可以为每种类型的Stream运行CREATE TABLE,但我不想进行任何代码更改。

换句话说,我希望能够在Config文件中定义Java类。

  

{" studentName":" string"," studentRollNumber":" integer"," studentGrade":& #34;整数"," studentPhoneNumber":" string"}

现在,如果第二个流进来像:

  

{" teacherName":" string"," teacherEmployeeId":" integer"," teacherPhoneNumber":& #34;整数"," teacherAddress":" string"}

我不想做代码更改。

我可以将可能性限制为4种基本数据类型。

我可能有像

这样的规则
  

{" excludeIf":{" columnName":" grade"," condition":" equals", "值":" 10"}

但是不要担心现在的排除规则,并关注如何从Config File重构JAVA类,然后将JSON流反序列化为该类的对象。

我看到Gson 2.0+提供了转换通用地图https://stackoverflow.com/a/20442943/429218

的功能

我正在寻找更多选项来动态构建Java中的类并将JSON流反序列化为它。

由于

1 个答案:

答案 0 :(得分:0)

这似乎在运行时,应用程序不知道JSON格式,但需要找到值和键来创建表并将数据放入db。请参阅Parsing Json in Java without knowing structure。这将让您了解以通用方式执行此操作。但是,如果应用程序发现新的和不存在的东西,您需要使用if语句编写更多代码以自动创建表。然而,正如@Jorge Campos所说,这是一个糟糕的设计。在真实世界中,应用程序将拥有合同,即客户端和服务器。以通用方式执行会影响垃圾收集的性能和cpu利用率。