2015-06-17 234 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

相關問題