scala
libraryDependencies += "io.circe" %% "circe-generic" % "0.14.1"
json
{
"name": "Alice",
"age": 30
}
scala
import io.circe._
import io.circe.generic.auto._
case class Person(name: String, age: Int)
scala
val json = """{
"name": "Alice",
"age": 30
}"""
val person = decode[Person](json)
scala
import io.circe._
import io.circe.generic.auto._
case class Person(name: String, age: Int)
scala
val person = Person("Alice", 30)
val json = encode(person)
scala
import io.circe.generic.semiauto._
implicit val personEncoder: Encoder[Person] = deriveEncoder[Person]
implicit val personDecoder: Decoder[Person] = deriveDecoder[Person]
scala
import io.circe.syntax._
implicit val personEncoder: Encoder[Person] = Encoder.instance { person =>
Json.obj(
"name" -> person.name.asJson,
"age" -> person.age.asJson,
"address" -> person.address.getOrElse("").asJson
)
}
implicit val personDecoder: Decoder[Person] = Decoder.instance { cursor =>
for {
name <- cursor.downField("name").as[String]
age <- cursor.downField("age").as[Int]
address <- cursor.downField("address").as[Option[String]]
} yield Person(name, age, address)
}
scala
import io.circe.syntax._
import io.circe.{Encoder, Decoder, HCursor, Json}
implicit val personEncoder: Encoder[Person] = new Encoder[Person] {
final def apply(person: Person): Json = {
Json.obj(
"name" -> person.name.asJson,
"age" -> person.age.asJson
)
}
}
implicit val personDecoder: Decoder[Person] = new Decoder[Person] {
final def apply(cursor: HCursor): Decoder.Result[Person] = {
for {
name <- cursor.downField("name").as[String]
age <- cursor.downField("age").as[Int]
} yield Person(name, age)
}
}