Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Scala Jackson进行JSON反序列化?_Scala_Jackson_Jackson Module Scala - Fatal编程技术网

使用Scala Jackson进行JSON反序列化?

使用Scala Jackson进行JSON反序列化?,scala,jackson,jackson-module-scala,Scala,Jackson,Jackson Module Scala,我是scala新手,尝试将我的json映射到一个对象。我找到了jackson scala模块,但不知道如何使用它。举个小例子可能会有所帮助 val json = { "_id" : "jzcyluvhqilqrocq" , "DP-Name" : "Sumit Agarwal" , "DP-Age" : "15" , "DP-height" : "115" , "DP-weight" : "68"} 我想把这个映射到个人(姓名:String,年龄:Int,身高:Int,体重:Int) 到目前为

我是scala新手,尝试将我的json映射到一个对象。我找到了jackson scala模块,但不知道如何使用它。举个小例子可能会有所帮助

val json = { "_id" : "jzcyluvhqilqrocq" , "DP-Name" : "Sumit Agarwal" , "DP-Age" : "15" , "DP-height" : "115" , "DP-weight" : "68"}
我想把这个映射到
个人(姓名:String,年龄:Int,身高:Int,体重:Int)

到目前为止,我一直在尝试使用:

import com.fasterxml.jackson.databind.ObjectMapper

Val mapper = = new ObjectMapper();    
val data = mapper.readValue(json, classOf[Person])
我正在使用的依赖项:

"com.fasterxml.jackson.module" % "jackson-module-scala_2.11" % "2.8.4"
我错过什么了吗

编辑:

[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?)

为了使其正常工作,您需要向对象映射器注册DefaultScalaModule:

val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
此外,您需要更新案例类并为Jackson提供属性名到字段名绑定:

case class Person(@JsonProperty("DP-Name") name: String, 
                  @JsonProperty("DP-Age") age: Int, 
                  @JsonProperty("DP-height") height: Int, 
                  @JsonProperty("DP-weight") weight: Int)
  • 问题是您没有使用
    ObjectMapper
    注册
    DefaultScalaModule
lazy val mapper=带有ScalaObjectMapper的新ObjectMapper()
mapper.registerModule(DefaultScalaModule)
  • 请找到一个工作和详细的答案,我已经使用泛型提供

我建议改为。不使用反射。错误消息表明您缺少默认构造函数(空)。Jackson首先创建一个空对象,然后查看json结构中的所有属性,并在结果对象中迭代设置它们。缺点是您还必须为每个对象的属性提供setter:(但正如Reactormock所建议的,我也建议使用circe,因为它提供了一种更为惯用的反序列化方法(至少在scala中)。scala jackson本身有什么解决方案/建议/方法吗?