How about storing the arbitrary JSON part as an Argonaut Json data type.
Is that within your constraints?
scala> import argonaut._, Argonaut._
import argonaut._
import Argonaut._
scala> val payload = """ { "name" : "joe", "age": 21, "arbitraryJson": {
"field1": "value1", "field2":"value2"} } """
payload: String = " { "name" : "joe", "age": 21, "arbitraryJson": {
"field1": "value1", "field2":"value2"} } "
scala> case class Person(name: String, age: Int, arbitraryJson: Json)
defined class Person
scala> implicit val jsonCodec: CodecJson[Person] =
casecodec3(Person.apply, Person.unapply)("name", "age", "arbitraryJson")
jsonCodec: argonaut.CodecJson[Person] = argonaut.CodecJson$$anon$1@2eabe6d3
scala> payload.decodeOption[Person]
res0: Option[Person] =
Some(Person(joe,21,{"field1":"value1","field2":"value2"}))
> --
> You received this message because you are subscribed to the Google
> Groups "argonaut-json" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to
argonaut-jso...@googlegroups.com
> <mailto:
argonaut-jso...@googlegroups.com>.
> For more options, visit
https://groups.google.com/d/optout.
--
Ionuț G. Stan |
http://igstan.ro