2016-07-14 5 views
0

Ich versuche, meine Daten aus JSON in eine Fall-Klasse ohne Erfolg zu extrahieren.extrahieren Fall Klassen aus JSON-Datei scala spielen

die Json-Datei:

[ 
    { 
    "name": "bb", 
    "loc": "sss", 
    "elements": [ 
     { 
     "name": "name1", 
     "loc": "firstHere", 
     "elements": [] 
     } 
    ] 
    }, 
    { 
    "name": "ca", 
    "loc": "sss", 
    "elements": [] 
    } 
] 

mein Code:

 case class ElementContainer(name : String, location : String,elements : Seq[ElementContainer]) 
     object elementsFormatter { 
     implicit val elementFormatter = Json.format[ElementContainer] 
     } 

    object Applicationss extends App { 

     val el = new ElementContainer("name1", "firstHere", Seq.empty) 
     val el1Cont = new ElementContainer("bb","sss", Seq(el)) 

     val source:String=Source.fromFile("src/bin/elementsTree.json").getLines.mkString 
    val jsonFormat = Json.parse(source) 
    val r1= Json.fromJson[ElementContainer](jsonFormat) 
} 

nach innen r1 dieses im laufenden bekommen:

JsError (List ((/ Elemente, List (Validation (List (error.path.missing), WrappedArray()))), (/ name, Liste (ValidationError (List (error.path.missing), WrappedArray()))), (/ location, Liste (ValidationError (List (irr or.path.missing), WrappedArray())))))

versucht, diese Daten zu extrahieren für immer, raten Sie bitte

+0

Die Namen der Elemente in JSON sollten mit den Namen der entsprechenden Variablen in der Fallklasse übereinstimmen (wenn Sie den Standardformatierer 'Json.format' verwenden). So sollte zum Beispiel 'location' in' loc' umbenannt werden. – irundaia

+0

In diesem Tutorial erfahren Sie, wie Sie Json in Fallklassen parsen können: http://pedrorijo.com/blog/scala-json/ und http://pedrorijo.com/blog/scala-json-part2/ Ich hoffe, es hilft Ihnen, das zu verstehen parsen Sie json korrekt mit play. Hinweis: https://github.com/travisbrown/circe scheint leistungsfähiger und einfacher zu verwenden als Play JSON – pedrorijo91

+0

thx für Ihre Antworten, sehr informativ und hilfreich! :) –

Antwort

0

Sie haben location statt loc und Sie Datei analysieren müssen in ein Seq[ElementContainer], da es sich um ein Array ist, kein einziges ElementContainer:

Json.fromJson[Seq[ElementContainer]](jsonFormat) 

auch haben Sie die validate Methode, die Sie entweder Fehler oder analysiert json Objekt zurückkehren ..

+0

Beachten Sie, dass Sie [] im 'fromJson'-Aufruf verpassen. Es sollte 'Json.fromJson [Seq [ElementContainer]] sein (jsonFormat)' – irundaia

+0

@irundaia thx :) –

+0

vielen Dank! –