Encoding and Decoding
circe uses Encoder
and Decoder
type classes for encoding and decoding. An Encoder[A]
instance
provides a function that will convert any A
to a Json
, and a Decoder[A]
takes a Json
value
to either an exception or an A
. circe provides implicit instances of these type classes for many
types from the Scala standard library, including Int
, String
, and others. It also
provides instances for List[A]
, Option[A]
, and other generic types, but only if A
has an
Encoder
instance.
Encoding data to Json
can be done using the .asJson
syntax:
import io.circe.syntax._
val intsJson = List(1, 2, 3).asJson
// intsJson: io.circe.Json = JArray(
// value = Vector(
// JNumber(value = JsonLong(value = 1L)),
// JNumber(value = JsonLong(value = 2L)),
// JNumber(value = JsonLong(value = 3L))
// )
// )
Use the .as
syntax for decoding data from Json
:
intsJson.as[List[Int]]
// res0: io.circe.Decoder.Result[List[Int]] = Right(value = List(1, 2, 3))
The decode
function from the included parser
module can be used to directly decode
a JSON String
:
import io.circe.parser.decode
decode[List[Int]]("[1, 2, 3]")
// res1: Either[io.circe.Error, List[Int]] = Right(value = List(1, 2, 3))