我不会进行任何复杂的JSON操作,我只需要将String转换为JSON对象。最简单的方法是什么?我是Scala的新手,所以如果这个问题听起来非常基础,请原谅。
谢谢。
注意: 从技术上讲,现在没有了 Scala "原生" 解析 JSON 的核心方式。你应该使用像 Spray JSON 或 Play JSON 这样的外部支持库。
自 Scala 2.11 开始,解析器组合库不再包含在核心语言 jar 包中,需要单独添加到您的项目中。此外,在解析器组合库的社区支持版本中,JSON 解析器已被弃用。我不建议使用这个库。
如果您选择添加它到您的项目中,可以通过将以下内容添加到 build.sbt 中来实现:
libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.0.4"
您可以在https://github.com/scala/scala-parser-combinators找到该库的源代码。
因为您特别询问关于 Scala 原生的 JSON 解析工具 - 您要寻找的包是 scala.utils.parsing.json。类似以下的代码应该可以工作:
import scala.util.parsing.json._
val parsed = JSON.parseFull("""{"Name":"abc", "age":10}""")
parsed
将取得如下值:Some(Map(Name -> abc, age -> 10.0))
@scala.deprecated("This object will be removed.", "2.11.0"),
对象JSON继承了scala.util.parsing.json.Parser。 - Ram Ghadiyaram同时,你还可以使用play framework的Json库,但也可以作为独立库使用。该库基于一个好的但已经被放弃的Jerkson项目,这是一个围绕超快速的基于Java的JSON库Jackson的Scala包装器。它具有非常丰富和良好记录的工具集,可用于处理JSON-转换器、验证器等。
import play.api.libs.json._
val json: JsValue = Json.parse("""{"a":1}""")
如果您想在没有Play框架的情况下使用此库,只需在build.sbt中使用字符串进行安装即可。
libraryDependencies += "com.typesafe.play" %% "play-json" % "2.3.0"
您可能想要使用像Spray JSON这样的库。它提供了许多易于使用的功能,用于转换到JSON和从JSON转换。
如果您决定使用Spray JSON,可以这样做:
import spray.json._
// some code here
val json = "your json string here".parseJson
parseFull
返回的是 Some(Map)
,而 parseRaw
返回的是 Some(JSONObject)
import scala.util.parsing.json._
val parsed = JSON.parseRaw("""{"Name":"abc", "age":10}""").getOrElse(yourDefault)
parsed
是一个JSONObject
@scala.deprecated("This object will be removed.", "2.11.0"),
对象JSON扩展了scala.util.parsing.json.Parser。 - Ram Ghadiyaram关于使用 dijon(底层使用jsoniter-scala)的建议未能找到。
请将以下内容添加到您的build.sbt文件中:
libraryDependency += "me.vican.jorge" %% "dijon" % "0.6.0" // Use %%% instead of %% for Scala.js
通过添加import语句打开动态类型支持:
import scala.language.dynamics._
或通过设置Scala编译器选项:
scalacOptions += "-language:dynamics"
import dijon._
如果需要扩展JSON功能,可以选择导入jsoniter-scala-core包对象:
import com.github.plokhotnyuk.jsoniter_scala.core._
解析和访问已解析数据:
val json = parse("""{"Name":"abc", "age":10}""")
println(json.age)