为具有超过22个属性的对象喷射json解析

时间:2018-02-27 05:16:08

标签: json scala parsing spray-json

我在scala中使用spray json库进行json格式化。我按照here指令构建了一个带有自定义类型的jsonformatter:

class Listing(val attr1:String,
              val attr2:String,
                    ...
              val attr35:String)

object MyJsonProtocol extends DefaultJsonProtocol {
  implicit object ListingJsonFormat extends RootJsonFormat[Listing] {
    def write(l: Listing) =
      JsArray(
         JsString(l.attr1),
         JsString(l.attr2),
              ...
         JsString(l.attr35))
    def read(value: JsValue) = value match {
      case JsArray(Vector(
           JsString(attr1),
           JsString(attr2),
            ...
           JsString(attr35))) =>
        new Listing(attr1, attr2, attr3, ..., attr35)
      case _ => deserializationError("Listing expected")
    }
  }
}

import MyJsonProtocol._

val json = Listing("red","dress","polka dot", ..., "clothing").toJson
val listing = json.convertTo[Listing]

但是,我收到此错误: error: too many arguments for unapply pattern, maximum = 22

有没有办法解析和格式化超过22个json属性?

2 个答案:

答案 0 :(得分:0)

您可以使用kebs库-它使用Scala宏为您创建JSON格式。

这里是具有超过22个字段的案例类的示例: https://github.com/theiterators/kebs/blob/fa9994086aac7eadd63c09c67e389a77c22beef7/spray-json/src/test/scala/SprayJsonFormatTests.scala#L161

答案 1 :(得分:-1)

尝试jsoniter-scala - 它支持案例类的10K以上字段。

这是test for 100 required fields

此库也具有出色的性能特征,以下是使用JDK 8与Jackson,Circe和Play-JSON库进行比较的基准测试结果:http://jmh.morethan.io/?source=https://plokhotnyuk.github.io/jsoniter-scala/oraclejdk8.json