用于Scala的Json扩展

在许多使用Json的编程语言中(序列化和反序列化值)是日常工作,并且可以轻松完成。 例如在python中:

此外,在使用Json.NET的C#中,我能够快速将Json反序列化为对象模型,以及从对象反序列化为Json字符串,并获得静态类型的所有好处:

一线反序列化

在这两种情况下,Json de / serialization都是统一的,我相信这是每种语言都应该的!

这就是为什么我惊讶地发现要在Java和Scala中对事物进行反序列化/序列化是多么冗长。 有很多选项和库,但是在大多数情况下,您必须处理中间AST,自定义序列化程序,隐式对象和大量样板。
这些问题大多数是由于java的类型擦除“将所有泛型类型替换为它们的边界或对象”。 这意味着没有真正的泛型
在运行时,因为所有通用类型均被“擦除”。

我在Json库中想要做的就是能够以最少的设置在一行中反序列化Json到Scala案例类和Java POJO。

JsonExtensions

尽管尝试了许多用于Java和Scala的Json库,但它们全都以一种或另一种方式存在缺陷。 这就是为什么我决定创建JsonExtensions的原因,它是围绕json4s的轻量级包装。

JsonExtensions隐藏了所有样板文件,使我能够像使用其他语言一样对值进行反序列化。

这是您可以使用它的示例:

对于Java POJO,您必须导入一组不同的扩展名,但是代码保持不变:

JavaExtensions还不存在

不幸的是,这个库并没有解决所有可能的案例,scala枚举和案例对象。 这就是为什么有些方法可以传递自己的序列化器。

入门

您所要做的就是将以下内容添加到build.sbt

  libraryDependencies + =“ io.onema”%“ json-extensions_2.12”%“ 0.1.0” 

结论

在大多数情况下,我已经能够在满满的个人项目中使用该库,并且非常可靠。 如果您知道优化此过程的方法,请在下面发表评论或提交PR。