moshi,新一代Json解析库

基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fun main() = runBlocking {
val moshi = Moshi.Builder()
.addLast(KotlinJsonAdapterFactory())
.build()

val json = """{"_name":"xxx","age":12}"""
val person = moshi.adapter(Peoson::class.java).fromJson(json)
println(person)
}
@JsonClass(generateAdapter = true)
//为了贴合condegen使用,他可以提高moshi在kotlin中的运行时速率
data class Peoson(
@Json(name = "_name")
val name:String,
val age:Int
)

##标准使用模板
retrofit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory

object Network {
private val baseUrl = "https://zfxt.top/"
private val retrofit = Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(
MoshiConverterFactory.create(
Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
)
).build()

//用来构建每个具体的服务类
fun <T>createService(clazz: Class<T>): T{
return retrofit.create(clazz)
}
}

首先,配置一个单例类,用来配置retrofit。
然后用interface接口来定义每个接口服务

1
2
3
4
5
6
7
8
9
10
11
12
13
import retrofit2.http.GET

interface PersonService {
@GET("person")
suspend fun person():Peoson

companion object{
//生成实例对象
fun instance():PersonService{
return Network.createService(PersonService::class.java)
}
}
}