json - 播放 Json : custom reads one field

标签 json scala play-json

假设我必须编写自定义 Reads[Person]Person类(class):

import play.api.libs.functional.syntax._

implicit val personReads: Reads[Person] = (
    (__ \ "name").read[String] and // or ~
    (__ \ "age").readNullable[Int]
) ((name, age) => Person(name = name, age = age))
它就像一个魅力,真的(不)。
但是当json对象中只有一个字段时,我该怎么办?
核心ReadsWrites是在转换这些“解析”步骤的功能语法中。
以下不编译:
import play.api.libs.functional.syntax._

implicit val personReads: Reads[Person] = (
  (__ \ "name").read[String]
)(name => Person(name))
你能建议如何处理吗?

最佳答案

选项 1:Reads.map

import play.api.libs.json._

case class Person(name: String)

object PlayJson extends App {
  implicit val readsPeson: Reads[Person] =
    (__ \ "name").read[String].map(name => Person(name))

  val rawString = """{"name": "John"}"""
  val json = Json.parse(rawString)
  val person = json.as[Person]
  println(person)
}

选项 2:Json.reads
import play.api.libs.json._

case class Person(name: String)

object Person {
  implicit val readsPerson = Json.reads[Person]
}

object PlayJson extends App { 
  val rawString = """{"name": "John"}"""
  val json = Json.parse(rawString)
  val person = json.as[Person]
  println(person)
}

关于json - 播放 Json : custom reads one field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46347586/

相关文章:

sql - jsonb_array_elements 获取元素位置

javascript - 如何从 JS 或 Mootools 中的表单获取数组并将其发送到 PHP?

mysql - 未解析的符号列 - Scala Slick

java - 是否可以在不可变链表中进行循环?

嵌套类的 json 编写器

scala - 我如何在 play.api.libs.json.JsValue 和 org.json4s.JValue 之间转换

php - 将 JSON 值转换为 PHP 字符串

ios - 如何使用 MKNetworkKit 将 NSArray 传递给 POST

java - 将游戏嵌入到标准 Java Web 应用程序中?

json - scala play json 读取 seal 特征或枚举类型对象