在scala.util.parsing.json._包的弃用面前使用什么?

时间:2015-04-25 16:08:17

标签: json scala

如何解决Scala问题? 我在项目中通过JSON使用警告:

  

包json中的对象JSON已被删除。这个对象将是   除去。

import scala.util.parsing.json._
JSON.parseRaw("[{'a':'b'},{'c':'d'}]")

4 个答案:

答案 0 :(得分:13)

通常,这意味着一个功能已被另一个实现取代,其使用优于旧实现,而这样的问题仅仅意味着OP懒得谷歌文档。对于Java语言中的库来说尤其如此,它非常严肃地对待向后兼容性(对于某些人来说它变得很痛苦)。 Scala生态系统在这方面并不是那么严格,升级到更新版本的语言意味着您可以获得不同的API甚至binary incompabilities。另见Scala: binary incompatibility between releases。这不是对Scala的评论。存在这些不兼容性的充分理由。

但是,我必须承认documentation for scala.util.parsing.json不包含任何有关此功能的推荐替代品的信息。我花了很长时间才挖掘出一些与推荐替代品的明确陈述相似的东西。

社区中似乎有很多关于这种弃用的观点和影响的讨论。如果您有兴趣,我建议您阅读this thread in the scala-users group

这种弃用的最多引用理由似乎是性能不佳和线程安全。

弃用是作为this Jira issue的一部分完成的,并且在this related task that was not completed due to the deprecation的结束评论中建议使用不同的解析器。

替代方案包括:

回答你的问题。这是一个警告,在实际删除此对象之前,您的代码不应中断。但是,如果在此功能中发现新的错误,则很可能不会修复它们。如果您升级到实际删除了这些软件包的较新版本的Scala,您的代码也会中断(版本2.11.0及更高版本,according to the documentation

答案 1 :(得分:2)

@toniedzwiedz先前提供的答案非常完整,并描述了围绕这个问题的整个故事。 我只是使用Scala 2.11遇到了同样的问题,我解决了添加in this repository的依赖关系。 特别是,Scala 2.11是:

<dependency>
    <groupId>org.scala-lang.modules</groupId>
    <artifactId>scala-parser-combinators_2.11</artifactId>
    <version>1.1.0</version>
</dependency>

然后你就没有警告了。

答案 2 :(得分:0)

答案 3 :(得分:-2)

不推荐使用Scala标准库中的JSON解析器。您应该选择一个更强大的第三方库,如Jackson,Play-Json,json4s等。