scala - Play JSON 中有没有办法为非对象(/数组)定义阅读器?
问题描述
基本上,我有一个这种形状的 JSON:
{
"color": "#abcdef"
}
所以我写了一个Reads
:
import java.awt.Color
case class Options(color: Color)
((__ \ "color").read[Color])(Options _)
除了没有读者Color
。我的第二次尝试是:
(
Color.decode((__ \ "color").read[String])
)(Options _)
但这显然也不正确。该文档显示了为{ }
(and [ ]
) 创建阅读器的方法,但不是为数字或字符串等“原语”创建阅读器的方法。我可以这样做吗?
解决方案
你可以做:
case class Options(color: Color)
object Options {
implicit val colorReads: Reads[Color] = __.read[String].map(Color.decode)
implicit val optionsReads: Reads[Options] = Json.reads[Options]
}
那么用法是:
val b = Json.parse("{ \"color\": \"#abcdef\"}").as[Options]
println(b) // prints: Options(java.awt.Color[r=171,g=205,b=239])
推荐阅读
- python - 将列表的两个索引值连接成python列表中的单个索引值
- xpath - 如何使用xpath检查xml中是否存在元素
- mfc - 如何从 MFC 中的另一个应用程序关闭子对话框窗口
- c++ - 如何从 QML 访问嵌套的 QStandardItemModel 的项目?
- python - Tkinter:触发需要输入字符串的python脚本
- javascript - 是否可以在选择功能的外部显示相应的国家标志。或者我们可以在两个地方都显示国旗吗
- django - 字段 'id' 需要一个数字,但得到了(带有 Id 的东西)
- angular - 如何在Angular中的重试调用中设置间隔
- mybatis - MyBatis 以毫秒为单位映射时间戳
- python - 使用 bin 分离数据并使用 python 查找最大值、平均值和标准差