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]