2017-01-16 18 views
1

私はスケーラに新しく、オブジェクトに私のjsonをマッピングしようとしています。私はjackson-scala-moduleを見つけましたが、使用方法を理解することはできませんでした。小さな例が助けになるかもしれません。私が使用していますScala JacksonをJSON逆シリアル化に使用しますか?

import com.fasterxml.jackson.databind.ObjectMapper 

Val mapper = = new ObjectMapper();  
val data = mapper.readValue(json, classOf[Person]) 

依存関係:

val json = { "_id" : "jzcyluvhqilqrocq" , "DP-Name" : "Sumit Agarwal" , "DP-Age" : "15" , "DP-height" : "115" , "DP-weight" : "68"} 

は、私は今、私はこれを使用してしようとしているティルPerson(name: String, age: Int, height: Int, weight: Int)

にこれをマッピングする

"com.fasterxml.jackson.module" % "jackson-module-scala_2.11" % "2.8.4" 

私は行方不明です何か?

EDIT:

[error] (run-main-4) com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of models.Person: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?) 
+0

代わりにhttps://circe.github.io/circe/をお勧めします。反射を使用しません。 – Reactormonk

+0

エラーメッセージには、デフォルトのコンストラクタ(空)がないことが示唆されています。 Jacksonは最初に空のオブジェクトを作成してから、jsonのストラクチャ内のすべての属性を調べ、それらを反復して結果オブジェクトに設定します。欠点は、オブジェクトのプロパティごとにセッターを用意する必要があることです。しかし、Reactormockが示唆しているように、私はcirceの使用をお勧めします。これは、デシリアライズ(少なくともスカラー化)の慣用的なアプローチを提供するからです。 – irundaia

+0

scala jackson自身の解決策/提案/回避策? –

答えて

4

それを動作させるためには、あなたはオブジェクトマッパーでDefaultScalaModuleを登録する必要があります。

val mapper = = new ObjectMapper(); 
mapper.registerModule(DefaultScalaModule) 

また、あなたはケースクラスを更新して提供する必要がありますプロパティ名とフィールド名のバインディングを持つジャクソン:

case class Person(@JsonProperty("DP-Name") name: String, 
        @JsonProperty("DP-Age") age: Int, 
        @JsonProperty("DP-height") height: Int, 
        @JsonProperty("DP-weight") weight: Int) 
+0

@MonteCristo –

関連する問題