如何反序列化类型和值为的JSON对象以在Scala中映射?

如何反序列化类型和值为的JSON对象以在Scala中映射?,json,scala,lift-json,Json,Scala,Lift Json,我需要反序列化一些JSON,如下所示: { "states": { "Position" : { "x": 1, "y": 2, "z": 3 }, "Timestamp" : { "value" : 123 } } } 名为Position和Timestamp的字段是要序列化的类的名称 目前我能够反序列化的唯一方法是将这个JSON转换成lift web JSON能够理解的格式。例如: { "states": [ { "jsonClass": "Position",

我需要反序列化一些JSON,如下所示:

{ "states": 
  { "Position" : { "x": 1, "y": 2, "z": 3 },  
    "Timestamp" : { "value" : 123 } }
}
名为Position和Timestamp的字段是要序列化的类的名称

目前我能够反序列化的唯一方法是将这个JSON转换成lift web JSON能够理解的格式。例如:

{ "states": [
    { "jsonClass": "Position", "x": 1, "y": 2, "z": 3 },  
    { "jsonClass": "Timestamp", "value" : 123 } 
   ]}
使用
格式
,如下所示

implicit val formats = new DefaultFormats {
  override val typeHintFieldName = "type"
  override val typeHints = ShortTypeHints(List(classOf[Position], classOf[Timestamp]))
}
是否可以反序列化顶级表单?

使用Jackson,然后:

case class Position(x: Int, y: Int, z: Int)
case class Timestamp(value: Int)
case class State(position: Position, timestamp: Timestamp)
case class States(states: Seq[State])

object Test extends App {

  val mapper = new ObjectMapper with ScalaObjectMapper
  mapper.registerModule(DefaultScalaModule)
  mapper.configure(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED, true)
  mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true)
  val states = mapper.readValue[Seq[States]]( """{
                                                |  "states": {
                                                |    "position" : { "x": 1, "y": 2, "z": 3 },
                                                |    "timestamp" : { "value" : 123 }
                                                |  }
                                                |}""".stripMargin)
  println(states)
}
给予

List(状态(状态(位置(1,2,3)),时间戳(123щщ))

注1:configure行允许Jackson在Json使用badgerfish表示法的情况下将{}作为单个元素数组处理


注2:如果您有大写字段名,请重命名案例类中的字段名以匹配,例如
案例类状态(位置:位置,时间戳:时间戳)

“状态”
的值应该是对象数组还是单个对象?
状态的值应该是一组(或列表)对象。我很高兴我们反序列化到的类与第二个相同是的-这是对我所问问题的回答,但我的问题不够清楚-我必须发布一个新的更清楚的。