2016-07-20 12 views
0

1.Eingabe ist JSON-Datei, die mehrere Datensätze enthält. Beispiel:Scala: JSON-Datei in Liste [DBObject] analysieren

[ {"user": "user1", "page": 1, "field": "some"}, {"user": "user2", "page": 2, "field": "some2"}, ... ]

2.I braucht jeden Datensatz aus der Datei als Dokument zu MongoDB Sammlung zu laden. Mit casbah für mit Mongo Interaktion Einfügen von Daten kann wie folgt aussehen:

def saveCollection(inputListOfDbObjects: List[DBObject]) = { 
    val xs = inputListOfDbObjects 
    xs foreach (obj => { 
    Collection.save(obj) 
    }) 

Frage: Was ist der richtige Weg (mit scala) ist JSON parsen am Ausgang zu erhalten Daten als Liste [DBObject]?

Jede Hilfe wird geschätzt.

Antwort

0

Sie könnten die Parser-Kombinator-Bibliothek in Scala verwenden.

Hier einige Code, den ich, dass tut dies für JSON gefunden: http://booksites.artima.com/programming_in_scala_2ed/examples/html/ch33.html#sec4

Schritt 1. eine Klasse namens JSON erstellen, die Ihren Regeln Parser enthält:

import scala.util.parsing.combinator._ 

class JSON extends JavaTokenParsers { 

    def value : Parser[Any] = obj | arr | 
         stringLiteral | 
         floatingPointNumber | 
         "null" | "true" | "false" 

    def obj : Parser[Any] = "{"~repsep(member, ",")~"}" 

    def arr : Parser[Any] = "["~repsep(value, ",")~"]" 

    def member: Parser[Any] = stringLiteral~":"~value 
} 

Schritt 2. In Ihrer Hauptfunktion gelesen Übergeben Sie in Ihrer JSON-Datei den Inhalt der Datei an Ihren Parser.

import java.io.FileReader 

object ParseJSON extends JSON { 
    def main(args: Array[String]) { 
     val reader = new FileReader(args(0)) 
     println(parseAll(value, reader)) 
    } 
} 
+0

Es ist eine gute Idee, den Code in Ihre Antwort zu setzen. Links brechen die ganze Zeit, was bedeutet, dass Ihre Antwort nicht mehr funktioniert. – Hyperbole