Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 在Scala中选择对象序列化格式_Xml_Json_Scala_Serialization_Yaml - Fatal编程技术网

Xml 在Scala中选择对象序列化格式

Xml 在Scala中选择对象序列化格式,xml,json,scala,serialization,yaml,Xml,Json,Scala,Serialization,Yaml,我有一个管理节点和圆弧图的应用程序,其中节点具有少量属性。现在我需要保存数据,并且需要选择序列化格式。这里列出了一些显而易见的问题,但可能还有其他问题我没有考虑 Java序列化 XML JSON 亚马尔 谷歌协议缓冲区 由于许多原因,Java序列化是一种非初学者,即使在Java世界中,出于互操作性、模式迁移和易用性的原因,XML和其他序列化格式也是首选格式 Scala的XML支持似乎是一个显而易见的选择。然而,我个人觉得在源代码中嵌入XML文本的想法令人反感(甚至语言的创建者也承认他对这个决

我有一个管理节点和圆弧图的应用程序,其中节点具有少量属性。现在我需要保存数据,并且需要选择序列化格式。这里列出了一些显而易见的问题,但可能还有其他问题我没有考虑

  • Java序列化
  • XML
  • JSON
  • 亚马尔
  • 谷歌协议缓冲区
由于许多原因,Java序列化是一种非初学者,即使在Java世界中,出于互操作性、模式迁移和易用性的原因,XML和其他序列化格式也是首选格式

Scala的XML支持似乎是一个显而易见的选择。然而,我个人觉得在源代码中嵌入XML文本的想法令人反感(甚至语言的创建者也承认他对这个决定感到遗憾)。在生成标记文本时,此功能可能更有意义-但是在序列化对象时,您确实需要一个更高级别的API,它尽可能多地分离理解内部数据结构的代码,从理解序列化格式语法的代码中——这意味着理想情况下,您不应该在源代码中实际看到任何XML。此外,谷歌的网络搜索揭示了一些博客文章,声称Scala的XMLDOM有很多缺点,使用起来很笨拙。(也有许多图书馆声称要改善这种状况,但接下来就要选择哪一个了。)

JSON和Yaml也可以工作——这里的问题是最流行的序列化库是Java,因此任务涉及选择或编写适当的Scala包装类。此外,这些库中的许多都依赖于bean反射,这是可能的,但在Scala中有点尴尬,需要额外的注释才能正常工作


最后,我已经将GoogleProtobufs用于许多其他序列化任务。好的方面是protoc编译器可以生成与目标语言的习惯用法相匹配的优雅api。然而,在这种情况下,protobufs的优点之一,即编码数据流的小尺寸,并不重要,我更希望序列化数据是人类可读的。

在我看来,JSON在Scala世界中是一种流行的选择,特别是Play框架提供的基于类型类的API:

所以我对Play的范围有点困惑;如果可能的话,我希望添加最小的依赖项,而不是依赖于一些巨大的框架(特别是考虑到这是一个Swing应用程序,而不是web应用程序)。理想情况下,我希望能够将一个.jar文件放到我的Eclipse项目中,而不必处理Maven或sbt之类的问题。我一直在研究的其他一些库似乎需要很多基础设施才能将它们整合到一个项目中。嗯,不知怎么的,我觉得Play被适当地模块化了,但我似乎错了检查sjson()、lift json()、Jerkson()。Jerkson和spray json看起来都非常好,但是我不知道如何将它们合并到我的Eclipse项目中——我能找到的唯一可以下载的jar文件是Maven build工件,它们显然不是普通的jar。如果您绝对不想,您可以从和下载Scala 2.10的spray json,以及Parboile lib的2个文件(spray json需要这些文件)。