Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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
将JSON根对象读取器作为数组或对象_Json_Scala_Deserialization_Spray Json - Fatal编程技术网

将JSON根对象读取器作为数组或对象

将JSON根对象读取器作为数组或对象,json,scala,deserialization,spray-json,Json,Scala,Deserialization,Spray Json,我有如下领域模型: sealed trait MyTrait case class MyObject(a: String) extends MyTrait case class MyArray(a: Seq(MyObject)) extends MyTrait 示例用法如下所示: // array [{"a": "foo"}, {"a": "bar"}] //object {"a": "foobar"} 我想为MyTrait编写一个Spray JSON阅读器,如: implicit val

我有如下领域模型:

sealed trait MyTrait
case class MyObject(a: String) extends MyTrait
case class MyArray(a: Seq(MyObject)) extends MyTrait
示例用法如下所示:

// array
[{"a": "foo"}, {"a": "bar"}]
//object
{"a": "foobar"}
我想为MyTrait编写一个Spray JSON阅读器,如:

implicit val myTraitReader: RooJsonReader[MyTrait] = new RootJsonReader[MyTrait] {
  override def read(json: JsValue): MyTrait = {
    // MAGIC?
    // I need to be able to distinguish between JsObject and JsArray
    // If I do json.asJsObject this is a JsObject then :D
    // there is not json.asJsArray?
    // How to pattern match on this use case?
  }
}
所有问题都被注释掉了D


谢谢

下面这样的怎么样

implicit val myTraitReader: RootJsonReader[MyTrait] = new RootJsonReader[MyTrait] {
    import MyObjectProtocol._
    import MyArrayProtocol._
    override def read(json: JsValue): MyTrait = json match {
      case jsObj: JsObject => ??? // Convert to MyObject here
      case jsArr: JsArray => ??? // Convert to MyArray here
      case _ => ??? // A JsNull here??
    }
  }