Json使用scala / play进行解析:如何获得特征?

Fary the great

当尝试使用play2在Scala中读取Json时,我陷入困境,并利用该信息创建了一个对象。这是我现在的代码:

  trait MyTrait {
  }

  object object1 extends MyTrait {
    override def toString: String = "object1"
  }

  object object2 extends MyTrait{
    override def toString: String = "object2"
  }

  def strToObject(str: String): MyTrait = str match {
    case "object1" => object1
    case "object2" => object2
  }

这就是我写Json的方法:

 implicit val traitWrites = new Writes[MyTrait] {
    def writes(t: MyTrait) = Json.obj(
      "t" -> t.toString)
  }

输出量

println("object1: " + Json.toJson(object1).toString)
println("object2: " + Json.toJson(object1).toString)

object1: {"t":"object1"}
object2: {"t":"object1"}

这就是我试图读取的方式,但是它不起作用。

 implicit val traitReads: Reads[MyTrait] = (
    (JsPath \ " t" ).read[String])map(str => strToObject(str)) (MyTrait.apply _)

  val jsonObject = Json.parse(Json.toJson(object1).toString)
  val aux = jsonObject \ "t"
  val myobject = aux.as[MyTrait]

它抱怨(MyTrait.apply _)和带有[未找到:值MyTrait]的[MyTrait]。但是,对于标准类,这是完全相同的事情,因此我真的不知道如何进行。

任何的想法?我是Play的新手(当然也包括Scala),所以我可能在做一些非常基本的错误。特别是,我高度怀疑“地图”调用。

干杯,

林斯

特性没有apply方法,这些通常与case类一起使用。您可以扩展Reads特性并实现reads方法,如下所示:

implicit val creatureReads = new Reads[MyTrait] {
  override def reads(js: JsValue): JsResult[MyTrait] = {
    JsSuccess(strToObject((js \ "t" ).as[String]))
  }
}

我编辑了答案以返回JsSuccess,可以添加更好的验证来检查是否存在“ t”。

您的代码也应该调用:

val myobject = jsonObject.as[MyTrait]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何对从 Play 中的特征继承的案例类进行 Json 编码?

如何在Scala Play中使用可变键解析JSON?

使用 SelectFromModel 和 MultiOutputRegressor 进行多步回归的特征选择。如何获得选定的特征及其特征重要性?

如何使用Scala Play框架进行JSON转换时摆脱多余的转义字符?

解析递归特征PlaySafe JSON Scala

使用 Spark Scala 解析 JSON 文件

如何在Scala中使用Play加载JSON文件

如何使用Scala Spark解析Wiki Infobox JSON

如何使用 Spark-Scala 解析 JSON 数据

如何使用带有 Scala 的 Circe 库解析变体 Json?

如何使用scala将json解析为键值对

如何在scala中使用空值解析json列表?

如何在scala play框架中解析json数组?

使用scala.util.parsing.json解析Json String

如何获得Scala特征中所有方法的名称

使用 Scala Jackson 库使用 Spark 加载和解析 JSON

如何在scala中使用playframework将json反序列化为密封特征?

如何使用AFNetworking进行JSON解析

在scala / play中解析“ stringified” JSON

如果Play / Scala JSON解析中的语句?

Scala Play 解析 json 流 (ndjson)

Scala Play Framework 2.6将特征格式密封为Json

如何进行模式匹配以获得serde_json解析的数字?

使用 play 将 JSON 值绑定到 Scala 类

使用scala / play将HOCON(.conf)转换为JSON?

JSON在Play框架(Scala)中使用硬编码值读取

在Scala中使用Play Framework转换原始Json

在scala中使用选项[或[A,B]]解析json的替代方法

使用scala解析键以数字开头的json对象