代码之家  ›  专栏  ›  技术社区  ›  Sindu_

如何在scala中将映射转换为Json

  •  -1
  • Sindu_  · 技术社区  · 6 年前

      val result =  s
      .groupBy(_.dashboardId)
      .map(
      each => Map(
      "dashboardId" -> each._1,
      "cubeId" -> each._2.head.cubeid,
      "dashboardName" -> each._2.head.dashboardName,
      "reports" -> each._2.groupBy(_.reportId).map(
        reportEach => Map(
          "reportId" -> reportEach._1,
          "reportName" -> reportEach._2.head.reportName,
          "selectedColumns" -> reportEach._2.groupBy(_.selectedColumnid).map(
            selectedColumnsEach => Map(
              "selectedColumnId" -> selectedColumnsEach._1,
              "columnName" -> 
              selectedColumnsEach._2.head.selectColumnName.orNull,
              "seq" ->selectedColumnsEach._2.head.selectedColumnSeq,
              "formatting" -> selectedColumnsEach._2
                )
             )
           )
         )
       )
     )
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   vdebergue    6 年前

    不能转换 Map[String, Any] 但您可以将 Map[String, String] Map[String, JsValue] .

    在您的示例中,可以通过将每个贴图值转换为 JsValue 在手之前:

    Map(
      "dashboardId" -> Json.toJson(each._1),
      "cubeId" -> Json.toJson(each._2.head.cubeid),
      "dashboardName" -> Json.toJson(each._2.head.dashboardName),
      "reports" -> Json.toJson(each._2.groupBy(_.reportId).map(
        reportEach => Map(
          "reportId" -> Json.toJson(reportEach._1),
          "reportName" -> (reportEach._2.find(_.reportName != null) match {
          case Some(reportNameData) => Json.toJson(reportNameData.reportName)
          case None => JsNull
        })),
      ...
    )
    
        2
  •  0
  •   Sindu_    6 年前

    val s = new SaveTemplate getReportsWithDashboardId(dashboardId)
    val result : Seq[Map[String,Any]] =  s.groupBy(_.dashboardId)
      .map(
        each => Map(
          "dashboardId" -> each._1,
          "cubeId" -> each._2.head.cubeid,
          "dashboardName" -> each._2.head.dashboardName,
          "reports" -> each._2.groupBy(_.reportId).map(
            reportEach => Map(
              "reportId" -> reportEach._1,
              "reportName" -> (reportEach._2.find(_.reportName != null) match {
              case Some(reportNameData) => reportNameData.reportName
              case None => null
            }),
              "selectedColumns" -> reportEach._2.groupBy(_.selectedColumnid).map(
                selectedColumnsEach => Map(
                  "selectedColumnId" -> selectedColumnsEach._1,
                  "columnName" -> selectedColumnsEach._2.head.selectColumnName.orNull,
                  "seq" ->selectedColumnsEach._2.head.selectedColumnSeq,
                  "formatting" -> Map(
                  "formatId" -> (selectedColumnsEach._2.find(_.formatId != null) match {
                    case Some(reportNameData) => reportNameData.formatId
                    case None => null
                  }),
                  "formattingId" -> (selectedColumnsEach._2.find(_.formattingid != null) 
                  match {
                    case Some(reportNameData) => reportNameData.formattingid
                    case None => null
                  }),
                  "type" -> (selectedColumnsEach._2.find(_.formattingType != null) match 
                  {
                    case Some(reportNameData) => reportNameData.formattingType
                    case None => null
                  })
                )
               )
              )
            )
          )
        )
      ).toSeq
    val k = toJson(result)
    Ok(k)