数组

时间:2015-07-02 10:48:47

标签: java arrays json scala playframework

我想为这样的Json写一个Json读者

    {
        "headers": [
            {
                "id": "time:monthly",
                "type": "a"
            },
            {
                "id": "Value1",
                "type": "b"
            },
            {
                "id": "Value2",
                "type": "b"
            }
        ],
        "rows": [
            [
                "2013-01",
                4,
                5
            ],
            [
                "2013-02",
                3,
                6
            ]
        ]
    }

我知道(感谢标题)在行元素中,第一个元素是a类型,第二个元素和第三个元素类型为b。我的目标是创建一个对象行(List[a],List[b])( 类型a和b的元素数量因我使用List)而异。 我的问题是我如何解析行或如何读取具有不同类型的对象和没有ID的Json数组?

1 个答案:

答案 0 :(得分:0)

我很想设置带有案例类的模型,并将播放框架宏基json阅读器与您的行的自定义混合使用。

    import play.api.libs.json._

    case class Header(id: String, `type`: String)
    case class Row(a: String, b: Int, c: Int)
    case class Data(headers: Seq[Header], rows: Seq[Row])

    object RowReads extends Reads[Row] {
      def reads(js: JsValue) = js match {
        case JsArray(Seq(a,b,c)) =>
          (a,b,c) match {
            case (a: JsString, b: JsNumber, c: JsNumber) =>
              JsSuccess(Row(a.value,b.value.toInt,c.value.toInt))
            case _ => JsError("nope")
          }
          case _ => JsError("nope")
      }
    }

    object Formats {
      implicit val headerReads = Json.reads[Header]
      implicit val rowReads = RowReads
      implicit val dataReads = Json.reads[Data]

      def readIt(js: JsValue) = {
        Json.fromJson[Data](js: JsValue)
      }
    }

了解更多详情。 https://playframework.com/documentation/2.4.x/ScalaJson