Packages

trait Reads[A] extends AnyRef

A Reads object describes how to decode JSON into a value. Reads objects are typically provided as implicit values. When Reads implicit values are in scope, a program is able to deserialize JSON into values of the right type.

The inverse of a Reads object is a Writes object, which describes how to encode a value into JSON. If you combine a Reads and a Writes then you get a Format.

Self Type
Reads[A]
Annotations
@implicitNotFound()
Source
Reads.scala
Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Reads
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Abstract Value Members

  1. abstract def reads(json: JsValue): JsResult[A]

    Convert the JsValue into a A

Concrete Value Members

  1. def andThen[B](rb: Reads[B])(implicit witness: <:<[A, JsValue]): Reads[B]
  2. def collect[B](error: JsonValidationError)(f: PartialFunction[A, B]): Reads[B]
  3. def composeWith[B <: JsValue](rb: Reads[B]): Reads[A]

    Creates a new Reads, which first passes the input JSON to rb, and then it executes this Reads on the pre-processed JSON (if rb has successfully handled the input JSON).

  4. def filter(error: JsonValidationError)(f: (A) => Boolean): Reads[A]
  5. def filter(f: (A) => Boolean): Reads[A]
  6. def filterNot(error: JsonValidationError)(f: (A) => Boolean): Reads[A]
  7. def filterNot(f: (A) => Boolean): Reads[A]
  8. def flatMap[B](f: (A) => Reads[B]): Reads[B]
  9. def flatMapResult[B](f: (A) => JsResult[B]): Reads[B]

    Creates a new Reads, which transforms the successful result from the current instance using the given function.

    Creates a new Reads, which transforms the successful result from the current instance using the given function.

    f

    the function applied on the successful A value

    final class Foo private(val code: String) extends AnyVal
    
    val A = new Foo("A")
    val B = new Foo("B")
    
    import play.api.libs.json.Reads
    
    val r: Reads[Foo] = implicitly[Reads[String]].flatMapResult {
      case "A" => JsSuccess(A)
      case "B" => JsSuccess(B)
      case _   => JsError("error.expected.foo")
    }
  10. def map[B](f: (A) => B): Reads[B]

    Create a new Reads which maps the value produced by this Reads.

    Create a new Reads which maps the value produced by this Reads.

    B

    The type of the value produced by the new Reads.

    f

    the function applied on the result of the current instance, if successful

  11. def orElse(v: Reads[A]): Reads[A]

    Creates a new Reads, based on this one, which first executes this Reads' logic then, if this Reads resulted in a JsError, runs the second Reads on the JsValue.

    Creates a new Reads, based on this one, which first executes this Reads' logic then, if this Reads resulted in a JsError, runs the second Reads on the JsValue.

    v

    the Reads to run if this one gets a JsError

    returns

    A new Reads with the updated behavior.

  12. def preprocess(f: PartialFunction[JsValue, JsValue]): Reads[A]

    Creates a new Reads, which first transforms the input JSON using the given tranformer, and then it executes this Reads on the pre-processed JSON.

  13. def widen[B >: A]: Reads[B]

    Widen this Reads.

    Widen this Reads.

    import play.api.libs.json.Reads
    
    sealed trait Animal
    case class Dog(name: String) extends Animal
    case class Cat(name: String) extends Animal
    
    def simple(r: Reads[Dog]): Reads[Animal] = r.widen[Animal]

Deprecated Value Members

  1. def compose[B <: JsValue](rb: Reads[B]): Reads[A]
    Annotations
    @deprecated
    Deprecated

    (Since version 2.7.0) Use composeWith