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
    评论
在 Scala 中解析 JSON 可以使用多种库,其中最常用的是 `Play JSON` 和 `Circe`。下面我将为你提供两种常见的解析方式。 1. 使用 Play JSON: 首先,你需要在项目的 build.sbt 文件中添加以下依赖项: ```scala libraryDependencies += "com.typesafe.play" %% "play-json" % "2.9.2" ``` 然后,你可以按照以下步骤解析 JSON: ```scala import play.api.libs.json._ // 定义一个 case class 表示你的 JSON 结构 case class Person(name: String, age: Int) // 创建一个 Json Reads 实例用于解析 JSON implicit val personReads: Reads[Person] = Json.reads[Person] // 解析 JSON val jsonStr = """{"name": "John", "age": 30}""" val json = Json.parse(jsonStr) val personResult = json.validate[Person] personResult match { case JsSuccess(person, _) => println(person) // 解析成功 case JsError(errors) => println(errors) // 解析失败 } ``` 2. 使用 Circe: 首先,你需要在项目的 build.sbt 文件中添加以下依赖项: ```scala libraryDependencies += "io.circe" %% "circe-core" % "0.14.1" libraryDependencies += "io.circe" %% "circe-generic" % "0.14.1" ``` 然后,你可以按照以下步骤解析 JSON: ```scala import io.circe._ import io.circe.parser._ import io.circe.generic.auto._ // 定义一个 case class 表示你的 JSON 结构 case class Person(name: String, age: Int) // 解析 JSON val jsonStr = """{"name": "John", "age": 30}""" val json = parse(jsonStr).getOrElse(Json.Null) val personResult = json.as[Person] personResult match { case Right(person) => println(person) // 解析成功 case Left(error) => println(error) // 解析失败 } ``` 以上是两种常见的解析 JSON 的方式,你可以根据自己的需求选择适合的库和方法。希望对你有所帮助!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值