2013-07-08 12 views
15

ich eine Karte haben, wie unterScala - Schreiben Json-Objekt-Datei und liest es

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

ich es in einen String Json umgewandelt und dann mit dem Code in eine Datei geschrieben unter

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

an Lage, den JSON-String aus der Datei lesen mit

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

Wie erhalte ich meine Karte aus dem String Json zurück oben?

EDIT: Am Lage, die Karte zu lesen, mit

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

Aber dieser Prozess mehr Zeit als die Größe der Karte erhöht sich nimmt.

+1

von 'mehr Time' aussehen fordern würde, meinen Sie O (n) oder etwas Schlimmeres? Wenn es noch schlimmer ist, sollten Sie Ihren Heap erweitern. –

Antwort

8

Versuchen Sie es mit einem wahrscheinlich schnelleren (und gründlicheren) Mapper.

Ich würde empfehlen, JacksMapper zu verwenden, die die ausgezeichnete Jackson für eine angenehmere Scala-Verwendung umschließt.

zu JSON Serialisierung wird so einfach wie

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

... und Deserialisieren

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

(edit)

Sie machen auch das Schreiben und Lesen von einfachen Einzeiler mit FileUtils from commons-io dabei

val json = FileUtils readFileToString (file, encoding) 

und

FileUtils write (file, json, encoding) 
+0

Welche Scala-Version wird unterstützt? – yAsH

+0

Von der ersten Seite 'Diese Version der Buchsen wurde gegen Scala 2.9.3, 2.10.2 und Jackson 2.2.2' –

+0

Am mit Scala 2.9.3-RC2 getestet. Ich bekomme den Fehler jacks_2.10-2.2.2.jar wird mit einer inkompatiblen Version von Scala (2.10) kompiliert, unmittelbar nachdem die JAR-Datei zum Projekt hinzugefügt wurde. – yAsH

1

Ich habe eigentlich viel mehr Gebrauch von json4s. Die Dokumentation ist viel übersichtlicher und umfassender und die Verwendung scheint etwas einfacher.

Eine ähnliche Operation an die, die Sie mögen dieses

import org.json4s.native.JsonFormats.parse 

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