import play.api.libs.json._ import play.api.libs.functional.syntax._ case class AToM( a: Int, b: Int, c: Int, d: Int, e: Int, f: Int, g: Int, h: Int, i: Int, j: Int, k: Int, l: Int, m: Int ) case class NToZ( n: Int, o: Int, p: Int, q: Int, r: Int, s: Int, t: Int, u: Int, v: Int, w: Int, x: Int, y: Int, z: Int ) case class Large( a: Int, b: Int, c: Int, d: Int, e: Int, f: Int, g: Int, h: Int, i: Int, j: Int, k: Int, l: Int, m: Int, n: Int, o: Int, p: Int, q: Int, r: Int, s: Int, t: Int, u: Int, v: Int, w: Int, x: Int, y: Int, z: Int ) implicit AToMFormat = Json.format[AToM] implicit NToZFormat = Json.format[NToZ] implicit val largeReader: Reads[Large] = { (AToMFormat.reads and NToZReads.reads)( (aToM, nToZ) => Large( aToM.a, aToM.b, aToM.c, aToM.d, aToM.e, aToM.f, aToM.g, aToM.h, aToM.i, aToM.j, aToM.k, aToM.l, aToM.m, nToZ.n, nToZ.o, nToZ.p, nToZ.q, nToZ.r, nToZ.s, nToZ.t, nToZ.u, nToZ.v, nToZ.w, nToZ.x, nToZ.y, nToZ.z ) ) } val s = """{"a": 0,"b": 1,"c": 2,"d": 3,"e": 4,"f": 5,"g": 6,"h": 7,"i": 8,"j": 9,"k": 10,"l": 11,"m": 12,"n": 13,"o": 14,"p": 15,"q": 16,"r": 17,"s": 18,"t": 19,"u": 20,"v": 21,"w": 22,"x": 23,"y": 24,"z": 25}""" scala> Json.parse(s).as[Large] //Large(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)