【问题标题】:scala play framework json conversionscala play框架json转换
【发布时间】:2017-07-09 11:13:58
【问题描述】:

我有两个case类A和B,我需要有条件地创建Json对象

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

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

语句 1 不能编译,但语句 2 可以。这背后的原因是什么?

【问题讨论】:

    标签: json scala playframework


    【解决方案1】:

    toJson(...)的签名是:

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

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

    现在,表达式if (cond) A else B的类型是值A和B各自类型的公共超类型。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 2019-04-11
      相关资源
      最近更新 更多