2013-07-08 35 views
15

我有一個地圖像下面斯卡拉 - 寫JSON對象到文件和閱讀它

val map : scala.collection.mutable.Map[String,Any] = Map(
    dummy1 -> ["cat1", "hash1", 101, 1373269076, {"1" : ["dummy", "dummy", "dummy"]}], 
    dummy2 -> ["cat1", "hash1", 102, 1373269076, {"2" : ["dummy", "dummy", "dummy"]}], 
    dummy3 -> ["cat1", "hash1", 103, 1373269076, {"3" : ["dummy", "dummy", "dummy"]}] 
) 

我將它轉換成一個JSON字符串,然後用代碼把它寫進文件下面

Some(new PrintWriter("foo.txt")).foreach{p => 
    p.write(JSONObject(map.toMap).toString()); p.close 
} 

我能夠使用

val json_string = scala.io.Source.fromFile("foo.txt").getLines.mkString 

如何讓我的地圖從上面的JSON字符串回從文件讀取JSON字符串?

編輯:我能夠與

val map1 = JSON.parseFull(json_string).get.asInstanceOf[Map[String,Any]] 

但是,這個過程花費更多的時間作爲地圖的大小增加閱讀地圖。

+1

通過'更time'的人,你的意思是爲O(n),或者更壞的東西?如果更糟,考慮擴大你的堆。 –

回答

8

嘗試使用可能更快(更徹底)的映射器。

我會建議使用JacksMapper它包裝的優秀Jackson一個更愉快的使用斯卡拉。

序列化到JSON變得簡單

val json = JacksMapper.writeValueAsString[MyClass](instance) 

...和反序列化

val obj = JacksMapper.readValue[MyClass](json) 

(編輯)

您可以同時寫入和讀取使用FileUtils from commons-io簡單的單行做

val json = FileUtils readFileToString (file, encoding) 

FileUtils write (file, json, encoding) 
+0

哪些Scala版本支持? – yAsH

+0

從第一頁開始'這個版本的插口已經在斯卡拉2.9.3,2.10.2和 傑克遜2.2.2' –

+0

Am上使用Scala 2.9.3-RC2進行了測試。獲取錯誤 jacks_2.10-2.2.2.jar在將jar文件添加到項目後立即與不兼容的Scala版本(2.10)交叉編譯。 – yAsH

1

我其實有很多更使用從json4s。文檔更加清晰和全面,使用起來更容易一些。

類似的操作,您請求看起來像這樣

import org.json4s.native.JsonFormats.parse 

... get your json string ... 
val parsedJson = parse(json) 
val extractedJson = parsedJson.extract[MyClass]