play-json-extensions icon indicating copy to clipboard operation
play-json-extensions copied to clipboard

Play Json extensions and SnakeCase

Open abhsrivastava opened this issue 6 years ago • 1 comments

I wrote this code

{
  case class Foo(accountNumber: String)
  object Foo {
      implicit val config = JsonConfiguration(SnakeCase)
      import ai.x.play.json.Jsonx
      implicit lazy val jsonFormat = Jsonx.formatCaseClass[Foo]
  }
}
Json.parse("""{"account_number":"a"}""").validate[Foo]

If I was not using Play Json extensions, it would have parsed account_number to accountNumber. but with the extensions (in code above). it fails

res11: JsResult[Foo] = JsError(
  List((JsPath(List(KeyPathNode("accountNumber"))), List(JsonValidationError(List("error.path.missing"), WrappedArray()))))
)

abhsrivastava avatar Dec 08 '19 00:12 abhsrivastava

Hi @abhsrivastava

play-json supports only lowerCamelCase by default. This lib follows that behavior

scala> case class Foo(accountNumber: String)
defined class Foo

scala> implicit val format = play.api.libs.json.Json.format[Foo]
format: play.api.libs.json.OFormat[Foo] = play.api.libs.json.OFormat$$anon$3@388f64f6

scala> play.api.libs.json.Json.parse("""{"account_number":"a"}""").validate[Foo]
res0: play.api.libs.json.JsResult[Foo] = JsError(List((/accountNumber,List(JsonValidationError(List(error.path.missing),WrappedArray())))))

dhoepelman avatar Dec 19 '19 15:12 dhoepelman