kotlin的Gson的使用
首先你得先加入依赖库 ‘com.google.code.gson:gson:2.8.5’
一:没有数据头的纯列表Json解析
[
{
"name": "zhangsan",
"age": "10",
"phone": "11111",
"email": "[email protected]"
},
{
"name": "lisi",
"age": "20",
"phone": "22222",
"email": "[email protected]"
},
...
]
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": "[email protected]"
},
{
"name": "lisi",
"age": "20",
"phone": "22222",
"email": "[email protected]"
},
...
]
}
解析过程
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": "[email protected]"
},
{
"name": "lisi",
"age": "20",
"phone": "22222",
"email": "[email protected]"
},
...
]
}
根据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
}
}