Scala - Writing Json object to file and reading it

2020-06-08 04:44发布

I have a Map like below

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"]}]
)

I converted it into a Json string and then wrote it into a file with the code below

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

Am able to read the Json string from the file using

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

How do I get my map back from the Json string above?

EDIT: Am able to read the map with

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

But, this process is taking more time as the size of the map increases.

2条回答
SAY GOODBYE
2楼-- · 2020-06-08 05:23

Try using a likely faster (and more thorough) mapper.

I would recommend using JacksMapper which wraps the excellent Jackson for a more pleasant Scala usage.

Serializing to JSON becomes as simple as

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

... and deserializing

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

(edit)

You can make also writing and reading simple one-liners using FileUtils from commons-io doing

val json = FileUtils readFileToString (file, encoding)

and

FileUtils write (file, json, encoding) 
查看更多
狗以群分
3楼-- · 2020-06-08 05:29

I actually got a lot more use from json4s. The documentation is much more clear and comprehensive, and the usage seems slightly easier.

A similar operation to the one you are requesting would look like this

import org.json4s.native.JsonFormats.parse

... get your json string ...
val parsedJson = parse(json)
val extractedJson = parsedJson.extract[MyClass]
查看更多
登录 后发表回答