Scala - 将Json对象写入文件并读取它

yAs*_*AsH 15 parsing json scala

我有一张如下地图

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"]}]
)
Run Code Online (Sandbox Code Playgroud)

我将其转换为Json字符串,然后将其写入包含以下代码的文件中

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

能够使用从文件中读取Json字符串

val json_string = scala.io.Source.fromFile("foo.txt").getLines.mkString
Run Code Online (Sandbox Code Playgroud)

如何从上面的Json字符串中获取我的地图?

编辑: 能够阅读地图

val map1 = JSON.parseFull(json_string).get.asInstanceOf[Map[String,Any]]
Run Code Online (Sandbox Code Playgroud)

但是,随着地图大小的增加,这个过程需要更多的时间.

Bru*_*der 9

尝试使用可能更快(更彻底)的映射器.

我建议使用JacksMapper,它包装了优秀的Jackson,以获得更舒适的Scala用法.

序列化为JSON变得如此简单

val json = JacksMapper.writeValueAsString[MyClass](instance)
Run Code Online (Sandbox Code Playgroud)

......和反序列化

val obj = JacksMapper.readValue[MyClass](json)
Run Code Online (Sandbox Code Playgroud)

(编辑)

您可以同时写入和读取使用简单的单行文件实用程序从公共-io的

val json = FileUtils readFileToString (file, encoding)
Run Code Online (Sandbox Code Playgroud)

FileUtils write (file, json, encoding) 
Run Code Online (Sandbox Code Playgroud)


Gre*_*reg 5

我实际上从json4s得到了更多的使用。文档更加清晰和全面,使用起来似乎稍微容易一些。

与您请求的操作类似的操作如下所示

import org.json4s.native.JsonFormats.parse

... get your json string ...
val parsedJson = parse(json)
val extractedJson = parsedJson.extract[MyClass]
Run Code Online (Sandbox Code Playgroud)