栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Play Framework 2.1中将Scala转换为JSON

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Play Framework 2.1中将Scala转换为JSON

Play 2.1 JSON API没有为Type提供序列化器

Map[String, Ojbect]

为特定类型定义

case class
Format
,而不是
Map[String, Object]

// { "val1" : "xxx", "val2" : ["a", "b", "c"] }case class Hoge(val1: String, val2: List[String])implicit val hogeFormat = Json.format[Hoge]

如果您不想创建案例类。以下代码为Map [String,Object]提供JSON序列化器/反序列化器:

implicit val objectMapFormat = new Format[Map[String, Object]] {  def writes(map: Map[String, Object]): JsValue =    Json.obj(      "val1" -> map("val1").asInstanceOf[String],      "val2" -> map("val2").asInstanceOf[List[String]]    )  def reads(jv: JsValue): JsResult[Map[String, Object]] =    JsSuccess(Map("val1" -> (jv  "val1").as[String], "val2" -> (jv  "val2").as[List[String]]))}

更动态

import play.api.libs.json._import play.api.libs.json.Reads._import play.api.libs.json.Json.JsValueWrapperimplicit val objectMapFormat = new Format[Map[String, Object]] {  def writes(map: Map[String, Object]): JsValue =     Json.obj(map.map{case (s, o) =>      val ret:(String, JsValueWrapper) = o match {        case _:String => s -> JsString(o.asInstanceOf[String])        case _ => s -> JsArray(o.asInstanceOf[List[String]].map(JsString(_)))      }      ret    }.toSeq:_*)  def reads(jv: JsValue): JsResult[Map[String, Object]] =    JsSuccess(jv.as[Map[String, JsValue]].map{case (k, v) =>      k -> (v match {        case s:JsString => s.as[String]        case l => l.as[List[String]]      })    })}

样例代码:

  val jv = Json.toJson(Map("val1" -> "xxx", "val2" -> List("a", "b", "c"), "val3" -> "sss", "val4" -> List("d", "e", "f")))  println(jv)  val jr = Json.fromJson[Map[String, Object]](jv)  println(jr.get)

输出:

> {"val1":"xxx","val2":["a","b","c"],"val3":"sss","val4":["d","e","f"]}> Map(val1 -> xxx, val2 -> List(a, b, c), val3 -> sss, val4 -> List(d, e, f))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/616883.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号