您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)STTP中如何進(jìn)行Json的基本使用分析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
1)對 Json 的支持
對 request,response 消息體中 JSON 的支持一般就是要做兩件事:一是定義 josn 的格式規(guī)范,另外就是根據(jù)格式規(guī)范進(jìn)行序列化、反序列化。STTP 提供開箱即用的對第三方JOSN庫的支持:包括Circe、Json4s、spray-json 等。
目前,從項(xiàng)目活躍度、維護(hù)程度上講Circe應(yīng)該是不錯的選擇。(https://scala.libhunt.com/compare-circe-vs-spray-json)
2)Circe
Circe竟然是基于挑戰(zhàn)智商的 CAT 實(shí)現(xiàn)的!
Circe使用 Encoder、Decoder 編解碼Json。Encoder[A]把 A 轉(zhuǎn)為 Json,Decoder[A]則把Json轉(zhuǎn)為A或者Exception(如果失敗話)。Circe對Scala庫中常見類型就提供了默認(rèn)的隱式實(shí)例。
對于簡單結(jié)構(gòu)的 case class,使用 Circe 提供的自動、半自動的編解碼就好。Circe 當(dāng)然也支持自定義轉(zhuǎn)換或?qū)?ADT 類型數(shù)據(jù)轉(zhuǎn)換。智商夠用可以去看https://github.com/milessabin/shapeless。
使用 circe-optics 模塊還可以對 Json 數(shù)據(jù)進(jìn)行遍歷、修改。
比如,下面從 order 中獲取用戶的電話號碼。
val phoneNum = root.order.customer.contactDetails.phone.string
如下是調(diào)用 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)
}
}
關(guān)于STTP中如何進(jìn)行Json的基本使用分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。