2016-07-14 11 views
0

私はjsonからデータをケースクラスに抽出しようとしましたが、成功しませんでした。jsonファイルからケースクラスを抽出するscala play

JSONファイル:

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

私のコード:

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

R1の内側になって、このIMを実行した後:

JsError(一覧((/要素、リスト(ValidationErrorを(/ location、List(ValidationError(List(error.path.missing)、WrappedArray())))))、 (間違いor.path.missing)、WrappedArray())))))

は永遠にこのデータを抽出しようとしては、

+0

JSONの要素の名前は、caseクラスの対応する変数の名前と一致する必要があります(デフォルトの 'Json.format'フォーマッタを使用している場合)。したがって、例えば 'location'は' loc'に名前を変更する必要があります。 – irundaia

+0

このチュートリアルでjsonとcaseクラスを解析する方法を確認してください。http://pedrorijo.com/blog/scala-json/とhttp://pedrorijo.com/blog/scala-json-part2/ playを使ってjsonを正しく解析する。注:あなたの答えは、JSON – pedrorijo91

+0

thxを再生するよりも、https://github.com/travisbrown/circeがより強力で使いやすいように思えます。非常に有益で役立ちます。 :) –

答えて

0

を助言してくださいあなたはlocation代わりlocを持っていると、あなたはにファイルを解析する必要がありますSeq[ElementContainer]、それは配列ではなく、単一ElementContainerだから:

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

、あなたはあなたのいずれかのエラーや解析されたJSONオブジェクトを返しますvalidate方法を持っている..

+0

あなたは 'fromJson'呼び出しに[]がないことに注意してください。 'Json.fromJson [Seq [ElementContainer]](jsonFormat)' – irundaia

+0

@irundaia thx :) –

+0

ありがとう! –

関連する問題