Play怎么使用json(基础)

play.api.libs.json可以表示JSON数据的数据结构,也可以用于在json数据结构和其他数据表示之间进行转换。该软件包的某些功能包括:

1.自动转通过case class达到最小的引用,如果你想用最少的代码运行,这是最好的方法。
2.用自定义验证进行解析
3.解析request body 中的数据为json,如果content无法解析或者提供的Content-type错误,通过自动生成错误。
4.可以在Play应用程序外部用作独立库。只需添加libraryDependencies += "com.typesafe.play" %% "play-json" % playVersion到您的build.sbt文件即可。

JsValue

这是代表所有JSON值一个trait。JSON库具有一个case类,该类扩展JsValue为表示每种有效JSON类型:

JsString
JsNumber
JsBoolean
JsObject
JsArray
JsNull

使用JsValue各种类型,您可以构造任何JSON结构的表示形式。

Json

该Json对象提供主要用于与JsValue结构之间的转换的接口。

JsPath

表示JsValue的结构路径,类似于XML中的XPath。用于遍历JsValue结构,并用于隐式转换器。

转换为JsValue

1.使用字符串解析

import play.api.libs.json._
//使用Json.parse把string类型的数据转成json数据
val json: JsValue = Json.parse("""
  {
    "name" : "Watership Down",
    "location" : {
      "lat" : 51.235685,
      "long" : -1.309197
    },
    "residents" : [ {
      "name" : "Fiver",
      "age" : 4,
      "role" : null
    }, {
      "name" : "Bigwig",
      "age" : 6,
      "role" : "Owsla"
    } ]
  }
  """)

2.使用类构造

import play.api.libs.json._

val json: JsValue = JsObject(Seq(
  "name" -> JsString("Watership Down"),
  "location" -> JsObject(Seq("lat" -> JsNumber(51.235685), "long" -> JsNumber(-1.309197))),
  "residents" -> JsArray(IndexedSeq(
    JsObject(Seq(
      "name" -> JsString("Fiver"),
      "age" -> JsNumber(4),
      "role" -> JsNull
    )),
    JsObject(Seq(
      "name" -> JsString("Bigwig"),
      "age" -> JsNumber(6),
      "role" -> JsString("Owsla")
    ))
  ))
))

也可以使用Json.obj和Json.arr来简化这种使用类来构造的json,大部分数值不需要用JsValue类进行显示包装,工厂方法是用因式转换。

import play.api.libs.json.{
    JsNull, Json, JsString, JsValue }
//Json.obj来替代JsObject,使用Json.arr来替代JsArray,但是可以不使用JsValue(JsString、JsNumber)等来封装。
val json: JsValue = Json.obj(
  "name" -> "Watership Down",
  "location" 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值