温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

STTP中如何进行Json的基本使用分析

发布时间:2021-12-14 09:29:23 来源:亿速云 阅读:210 作者:柒染 栏目:互联网科技

这篇文章将为大家详细讲解有关STTP中如何进行Json的基本使用分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1)对 Json 的支持

对 request,response 消息体中 JSON 的支持一般就是要做两件事:一是定义 josn 的格式规范,另外就是根据格式规范进行序列化、反序列化。STTP 提供开箱即用的对第三方JOSN库的支持:包括Circe、Json4s、spray-json 等。

目前,从项目活跃度、维护程度上讲Circe应该是不错的选择。(https://scala.libhunt.com/compare-circe-vs-spray-json)

2)Circe

Circe竟然是基于挑战智商的 CAT 实现的!

Circe使用 Encoder、Decoder 编解码Json。Encoder[A]把 A 转为 Json,Decoder[A]则把Json转为A或者Exception(如果失败话)。Circe对Scala库中常见类型就提供了默认的隐式实例。

对于简单结构的 case class,使用 Circe 提供的自动、半自动的编解码就好。Circe 当然也支持自定义转换或对 ADT 类型数据转换。智商够用可以去看https://github.com/milessabin/shapeless。

使用 circe-optics 模块还可以对 Json 数据进行遍历、修改。

比如,下面从 order 中获取用户的电话号码。

val phoneNum = root.order.customer.contactDetails.phone.string

如下是调用 NASA某Api并解析Response的代码示例, 是不是太方便了?!

  import io.circe.generic.auto._  import sttp.client._  import sttp.client.circe._
 case class Links(self: String, next: String)  case class Page(number: Int, size: Int, total_elements: Int, total_pages: Int)  case class NearEarthObject(absolute_magnitude_h: Double, designation: String)  case class NasaData(links: Links, page: Page, near_earth_objects: List[NearEarthObject])
 implicit val backend = HttpURLConnectionBackend()  val resp = basicRequest    .get(uri"https://api.nasa.gov/neo/rest/v1/neo/browse?api_key=${NASA_API_KEY}")    .response(asJson[NasaData])    .send()
 resp.body match {    case Left(failure) => println(failure)    case Right(data) => {          println("Get response from NAS Api:")          println(data)    }  }

关于STTP中如何进行Json的基本使用分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI