Play Framework Scala format large JSON (No unapply or unapplySeq function found)

后端 未结 3 1238
感情败类
感情败类 2021-01-11 15:33

I need to receive a big JSON on my server (more than 22 fields). I have a case class with a lot of fields:

case class Filters(objectType: Option[String] = No         


        
相关标签:
3条回答
  • 2021-01-11 16:05

    I had the same pb and find a solution by using

    Jsonx.formatCaseClass[Filters]
    

    The explication can be found https://harrylaou.com/playframework/bigjson/

    0 讨论(0)
  • 2021-01-11 16:05

    I did it this way:

    case class Filters(part1: Part1, part2: Part2, ...)
    
    case class Part1(
        field1: Field1,
        field2: Field2,
        ...
        field10: Field10,
    )
    
    object Part1 {
        implicit val part1Format = Json.format[Part1]
    }
    
    ...
    
    object Filters {
        implicit val filtersReads = (
            JsPath.read[Part1] and
            JsPath.read[Part2] and
            ...
        )(Filters.apply _)
    
        implicit val filtersWrites = (
            JsPath.write[Part1] and
            JsPath.write[Part2] and
            ...
        )(unlift(Filters.unapply))
    }
    
    0 讨论(0)
  • 2021-01-11 16:27

    As @Sawyer mentioned you can use an external library. This was taken from this blog.

    First add the lib dependency to your SBT

    libraryDependencies += "ai.x" %% "play-json-extensions" % "0.42.0"
    

    Then you can use it like this:

    import ai.x.play.json.Jsonx
    import play.api.libs.json.{Json, OFormat}
    
    case class Foo(a1: String, a2: String, a3: String, a4: String, a5: String,
                   a6: String, a7: String, a8: String, a9: String, a10: String,
                   a11: String, a12: String, a13: String, a14: String, a15: String,
                   a16: String, a17: String, a18: String, a19: String, a20: String,
                   a21: String, a22: String, a23: String)
    
    object Foo {
      implicit val f: OFormat[Foo] = Jsonx.formatCaseClass[Foo]
    }
    
    0 讨论(0)
提交回复
热议问题