scala play框架json转换

时间:2017-07-09 11:13:58

标签: json scala playframework

我有两个案例类A和B.我需要有条件地创建Json对象

  1. Json.toJson(if(cond)A else B)

  2. if(cond)Json.toJson(A)else Json.toJson(B)

  3. 语句1不编译但语句2编译。这背后的原因是什么?

1 个答案:

答案 0 :(得分:1)

toJson(...)的签名是:

 toJson[T](o: T)(implicit tjs: Writes[T]): JsValue 

这意味着参数类型Writes的范围必须有隐式T

现在,表达式 if (cond) A else B的类型是各种类型的值A和B的常见超类型

对于没有显式继承自同一基类的类型,常见的超类型将是Scala的AnyWrites没有隐式Any(因为什么是JSON表示什么?)所以在编译时你会得到一个“隐式未找到”错误。

另一方面,条件语句2的每个分支的计算结果为JsValue,因此这是表达式的值。