Moshi的基本使用

moshi是square出品的面向Java和Kotlin的JSON解析库,尤其适合基于Kotlin的Android开发。https://github.com/square/moshi

gradle 引入


compile 'com.squareup.moshi:moshi-kotlin:$latest_version'

POJO定义


data class

data class User(val name:String,val detail:UserDetail)
data class UserDetail(val age:Int, val job:String)

creator

fun  createUser():User{
    return User("Jack",UserDetail(25,"Sales"));
}

fun createMultiUser(): List<User> {

    return listOf<User>(User("Jack",UserDetail(25,"Sales")),
            User("Pony",UserDetail(30,"Marketing")),
            User("Robin",UserDetail(31,"Engineer")))
}

JSON解析


CLASS→JSON

val user = createUser()

// CLASS -> JSON
val moshi = Moshi.Builder().build()
val adapter = moshi.adapter(User::class.java)
val decodeJson = adapter.toJson(user)

println("CLASS→JSON:${decodeJson}")

通过Pojo类信息创建adapter,然后通过其toJson传入实际对象进行转换

output:
--------
CLASS→JSON:{"detail":{"age":25,"job":"Sales"},"name":"Jack"}

JSON→CLASS

 // JSON→CLASS
 val json = "{\"detail\":{\"age\":30,\"job\":\"Sales\"},\"name\":\"Ben\"}"

    val fromJson = adapter.fromJson(json)
    println("JSON→CLASS:${fromJson}")

通过adapterfromJson将JSON你转换为CLASS

output:
--------
JSON→CLASS:User(name=Ben, detail=UserDetail(age=30, job=Sales))

LIST的JSON解析


LIST→JSON

val type = Types.newParameterizedType(List::class.java,User::class.java)
val listAdapter:JsonAdapter<List<User>> = moshi.adapter(type)
val multiUserJson = listAdapter.toJson(createMultiUser())

println("LIST→JSON:${multiUserJson}")

创建adapter时需要List中泛型信息,所以先通过Types.newParameterizedType创建参数化化类型的type,然后基于type创建adapter,最后再通过toJson进行转换

output:
---------
LIST→JSON:[{"detail":{"age":25,"job":"Sales"},"name":"Jack"},{"detail":{"age":30,"job":"Marketing"},"name":"Pony"},{"detail":{"age":31,"job":"Engineer"},"name":"Robin"}]

JSON→LIST

 val file = File("src/main/resources/list_data.json")
    val fileContents = file.absoluteFile.bufferedReader().use { it.readText() }

    val listObject = listAdapter.fromJson(fileContents);
    println("JSON→LIST:${listObject}")

list_data.json中的内容如下:

[
  {
    "name": "Jack",
    "detail": {
      "age": 25,
      "job": "Sales"
    }
  },
  {
    "name": "Pony",
    "detail": {
      "age": 31,
      "job": "Marketing"
    }
  },
  {
    "name": "Robin",
    "detail": {
      "age": 30,
      "job": "Engineer"
    }
  }
]
output:
---------
JSON→LIST:[User(name=Jack, detail=UserDetail(age=25, job=Sales)), User(name=Pony, detail=UserDetail(age=31, job=Marketing)), User(name=Robin, detail=UserDetail(age=30, job=Engineer))]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fundroid

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值