2015-06-17 179 views
10

我想将简单的JSON字符串(如{"Name":"abc", "age":10})转换为相应的JSON对象(不是诸如“Person”之类的自定义Scala对象)。 Scala是否支持将字符串转换为JSON对象的任何内置方法?将JSON字符串转换为Scala中的JSON对象

我不会有任何复杂的JSON操作。我只需要将字符串转换为JSON对象。什么是最简单的方法来做到这一点?我是新来的Scala,所以我很抱歉,如果这个问题听起来很基本。

谢谢。

+0

有Scala中的许多JSON库。他们每个人都提供了一个解析函数来从字符串中获取JSON值。你首先需要选择一个lib(播放JSON,Argonaut,...)。 – cchantep

+0

@cchantep Thx,但我想尽可能避免使用外部库。这就是为什么我想知道Scala是否有内置支持。猜猜我只需要使用一个图书馆。 – drunkenfist

回答

5

您可能想要使用像Spray JSON这样的库。它提供了很多易于使用的功能来转换和从JSON转换。 如果你决定使用喷雾JSON,你可以这样做:

import spray.json._ 
// some code here 
val json = "your json string here".parseJson 
3

您也可以从play framework使用JSON库,但也可以作为独立的库。这个库基于良好但被遗弃的Jerkson项目,这是一个围绕基于超快Java的JSON库的杰克逊的Scala包装。它具有与JSON的工作非常丰富和良好的记录工具集 - transofrmers,验证等

import play.api.libs.json._ 

val json: JsValue = Json.parse("""{"a":1}""") 

要使用此lib中无间隙正好build.sbt用绳子

libraryDependencies += "com.typesafe.play" %% "play-json" % "2.3.0" 
11

由于安装您特意询问了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))


注:为斯卡拉2.11的解析器组合子库不再包含在核心语言jar和需要分别添加到您的项目。您可以通过添加以下到您的build.sbt其添加到您的项目:

libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.0.4"

您可以在https://github.com/scala/scala-parser-combinators找到库的源代码。


其他许多人已经注意到,外部库通常比原生Scala更好。我个人使用Play JSON。

1

parseFull回报-方面的Some(Map)parseRaw回报的Some(JSONObject)

import scala.util.parsing.json._ 

val parsed = JSON.parseRaw("""{"Name":"abc", "age":10}""").getOrElse(yourDefault) 

parsed来讲是把JSONObject

相关问题