当前位置: 首页 > 知识库问答 >
问题:

Java/JSON——通用反序列化程序

拓拔坚
2023-03-14

我正在努力实现的是:

  • 我们有一个JSON对象流进来。
  • 我想从JSON重建一个Java对象。
  • 我想应用转换(如更改字符串的格式和拒绝一个对象,如果满足一些条件,如'isToBe消耗'==false和可能的平坦从嵌套到线性的继承)
  • 我希望能够将JSON对象的值存储到数据库中。

当一种新类型的JSON对象流出现时,我可以为每种类型的流运行CREATE TABLE,但我不想做任何代码更改。

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

{“studentName”:“string”,“studentRollNumber”:“integer”,“studentGrade”:“integer”,“studentPhoneNumber”:“string”}

现在,如果第二条流进来,比如:

{“teacherName”:“string”,“teacherEmployeeId”:“integer”,“teacherPhoneNumber”:“integer”,“teacherAddress”:“string”}

我不想更改代码。

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

我可能有这样的规则

{“excludeIf”:{“columnName”:“grade”,“condition”:“equals”,“value”:“10”}

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

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

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

谢谢

共有1个答案

谢洛城
2023-03-14

这似乎是在运行时,应用程序不知道JSON格式,但需要找到值和键来创建表并将数据放入数据库。请参考在不了解结构的情况下在Java中解析Json。这将给你一个通用方法的想法。然而,如果应用程序发现新的和不存在的内容,您需要使用if语句编写更多代码来自动创建表。然而,正如@Jorge Campos所说,这是一个糟糕的设计。在现实世界中,应用程序将有一个契约,即客户端和服务器。以常规方式执行会影响垃圾收集的性能和大量cpu利用率。

 类似资料:
  • 问题内容: 我对WCF有点陌生,将尝试清楚地描述我要做什么。 我有一个使用JSON请求的WCF Web服务。我在大多数情况下都可以很好地发送/接收JSON。例如,以下代码可以正常运行,并且符合预期。 JSON已发送: WCF: 这将按预期返回带有“ Dave”的JSON对象。问题是我无法始终保证我收到的JSON与我的DataContract中的成员完全匹配。例如,JSON: 由于大小写不匹配,将无

  • 我有一个简单的问题,假设我有这个json 以这种方式映射: 我想知道是否可以通过使用一些自定义setter/注释或其他东西在内部对象中保存一个外部字段: PS:由于json的复杂性,使用自定义反序列化是我最后的选择

  • 我对解析json有一个问题。它有一个日期为exapmle-"2014-01-07"。当它解析并成为createUserRequest.getBirthday()时,它包含-"2014-01-07T04:00:00.000 04:00"。我需要它在createUserRequest对象中,然后我会用另一个对象断言它。问题是如何得到“2014-01-07”? 在CreateUserRequest中,我

  • 问题内容: 我是C ++的新手。使用序列化和反序列化类型数据的最简单方法是什么。我发现了一些使用示例,但它们对我来说是晦涩的。 问题答案: 请注意,将键解释为路径,例如,将对“ ab” =“ z”放置将创建{“ a”:{“ b”:“ z”}} JSON,而不是{“ ab”:“ z”} 。否则,使用是微不足道的。这是一个小例子。

  • 问题内容: 我们使用Jackson 1.9.1对与Java对象之间的JSON请求响应字符串进行序列化和反序列化。原始Java类型,集合类型和自定义对象都可以(反)序列化而不会出现问题。但是,尝试将JSON字符串反序列化为Java枚举时遇到问题。JSON字符串的序列化方式如下: wt的Java类型如下所示: 我在SO上提到了this,this和this,并提出了重量单位的枚举,如下所示: 问题是,每

  • 如何将jackson JSON映射器与Java 8 LocalDateTime一起使用? JSONMappingException:无法从JSON字符串实例化类型[simple type,class java.time.LocalDateTime]的值;没有单字符串构造函数/工厂方法(通过引用链:mydto[“field1”]->subdto[“date”])