前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STTP的基本使用(2):Json

STTP的基本使用(2):Json

作者头像
dhyuan
发布2022-05-30 14:05:37
5830
发布2022-05-30 14:05:37
举报
文章被收录于专栏:响应式编程

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 实现的!官网: https://circe.github.io/circe/。

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 中获取用户的电话号码。

代码语言:javascript
复制
val phoneNum = root.order.customer.contactDetails.phone.string

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

代码语言:javascript
复制
  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)
    }
  }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 响应式编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档