【问题标题】:spray json parsing for an object with more than 22 attributes为超过22个属性的对象喷射json解析
【发布时间】:2018-02-27 05:16:08
【问题描述】:

我正在使用 spray json 库在 scala 中进行 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 属性?

【问题讨论】:

  • 你有固定大小属性列表35的Json吗?你的意见是什么?

标签: json scala parsing spray-json


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    试试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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多