kotlin的Gson的使用
首先你得先加入依赖库 ‘com.google.code.gson:gson:2.8.5’
一:没有数据头的纯列表Json解析
[
{
"name" : "zhangsan" ,
"age" : "10" ,
"phone" : "11111" ,
"email" : "11111@11.com"
} ,
{
"name" : "lisi" ,
"age" : "20" ,
"phone" : "22222" ,
"email" : "22222@22.com"
} ,
...
]
1 .需要一个Bean对象。
data class UserBean (
val name: String,
val age: String,
val phone: Strin,
val emall: String,
)
2.开始解析 只需要3部分
fun parseNoHeaderJArray ( ) {
val userJson= UserApi. instance. getOriginalFunData ( this )
val userJson= JsonToStringUtil. getStringByJson ( this , R. raw. juser_1)
val parser= JsonParser ( )
val JsonArray= parser. parser ( userJson) . asJsonArray
val gson= Gson ( )
val userList= mutableListOf< UserBean> ( )
for ( user : jsonArray) {
val userBean= gson. fromJson ( user, UserBean:: class . java)
userList. add ( userBean)
}
println ( userList)
}
二:有数据头的纯数据数组数据解析
{
"muser" : [
{
"name" : "zhangsan" ,
"age" : "10" ,
"phone" : "11111" ,
"email" : "11111@11.com"
} ,
{
"name" : "lisi" ,
"age" : "20" ,
"phone" : "22222" ,
"email" : "22222@22.com"
} ,
...
]
}
解析过程
fun parseHaveHeaderJArray ( ) {
val cuerJson = CityApi. instance. getOriginalFundData ( this )
val jsonObject = sonParser ( ) . parse ( userJson) . asJsonObject
val jsonArray = jsonObject. getAsJsonArray ( "muser" )
val gson = Gson ( )
val userList = mutableListOf< UserBean> ( )
for ( user in jsonArray) {
val userBean =
gson. fromJson< UserBean> (
user,
object : TypeToken< UserBean> ( ) { } . type)
userList. add ( userBean)
}
print ( userList)
}
总结:
1.与第一种类似,不同的是在获取到JsonArrary后
再从JsonArrary中拿到key:muser的值getAsJsonArray(“muser”)
2.在解析数据的时候通过TypeToken反射拿到数据类 这是一个匿名内部类
作用就是获取像list这样的泛型信息。自行脑补
三:有数据头的复杂数
{
"code" : 200 ,
"msg" : "OK" ,
"muser" : [
{
"name" : "zhangsan" ,
"age" : "10" ,
"phone" : "11111" ,
"email" : "11111@11.com"
} ,
{
"name" : "lisi" ,
"age" : "20" ,
"phone" : "22222" ,
"email" : "22222@22.com"
} ,
...
]
}
根据json的数据格式建立实体类,这里的实体类是包含所有字段,Gson能直接解析成List
so:Bean这样写 由两个data类组成 如果UserBean中还有List 同样建立一个OtherBean data类 所有的类都可以写在一个.kt文件中
data class ResultBean (
val code: Int,
val msg: String,
val muser: List< UserBean>
)
data class UserBean (
val name: String,
val age: String,
val phone: String,
val email: String
)
现在看一下Gson是如何解析的把
fun parseHaveHeaderJArray ( ) {
val resultJson= CityApi. instance. getOriginalFundData ( this )
val resultBean=
Gson ( ) . fromJson ( resultJson, ResultBean:: class . java)
val userBeanList= resultBean. muser
print ( userBeanList)
}
这种方式是最简单的
这几种方式差不多能应对所有的Json的数据类型了
还有其他内容更多更复杂的数据就不一一列举了。
如和从**.json文件中获取数据:
从assets文件夹中获取.json的文件转换成字符串
class UserApi private constructor ( ) {
companion object {
val instance = UserApi ( )
}
fun getOriginalFundData ( context: Context) : String? {
var inputStream: InputStream? = null
try {
inputStream = context. assets. open ( "user.json" )
return convertStreamToString ( inputStream) as String
} catch ( e: Exception) {
e. printStackTrace ( )
}
return null
}
fun convertStreamToString ( input: InputStream) : String? {
var s: String? = null
try {
val scanner = Scanner ( input, "UTF-8" )
. useDelimiter ( "\\A" )
if ( scanner. hasNext ( ) ) {
s = scanner. next ( )
}
input. close ( )
} catch ( e: IOException) {
e. printStackTrace ( )
}
return s
}
}