Scala - Запись объекта 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
}

Могу прочитать строку Json из файла, используя

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

Как мне вернуть карту из строки Json выше?

EDIT: Я могу читать карту с помощью

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

Но этот процесс занимает больше времени по мере увеличения размера карты.

Ответы

Ответ 1

Попробуйте использовать вероятный более быстрый (и более тщательный) картограф.

Я бы рекомендовал использовать JacksMapper, который обертывает отличный Jackson для более приятного использования Scala.

Сериализация 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) 

Ответ 2

Я действительно получил гораздо больше пользы от json4s. Документация гораздо более понятна и всеобъемлющая, и использование кажется немного проще.

Аналогичная операция с той, которую вы запрашиваете, будет выглядеть следующим образом:

import org.json4s.native.JsonFormats.parse

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