kotlin의 Gson 사용
23208 단어 배우다
kotlin의 Gson 사용
우선 의존 라이브러리'com'에 가입해야 합니다.google.code.gson:gson:2.8.5’
1: 데이터 헤더가 없는 순수한 목록 Json 해석
[
{
"name": "zhangsan",
"age": "10",
"phone": "11111",
"email": "[email protected]"
},
{
"name": "lisi",
"age": "20",
"phone": "22222",
"email": "[email protected]"
},
...
]
일.빈 상대가 필요해.
data class UserBean(
val name:String,
val age:String,
val phone:Strin,
val emall:String,
)
2. 해석을 시작하려면 세 부분만 필요하다
fun parseNoHeaderJArray(){
//**********Json *************
// user.json
val userJson=UserApi.instance.getOriginalFunData(this)
//
val userJson=JsonToStringUtil.getStringByJson(this, R.raw.juser_1)
//**********JsonArray *************
// json JsonParser
val parser=JsonParser()
// Json JsonArray
val JsonArray=parser.parser(userJson).asJsonArray
//**********Gson *************
//Gson
val gson=Gson()
val userList=mutableListOf<UserBean>()
// userList
for(user : jsonArray){
val userBean=gson.fromJson(user,UserBean::class.java)
userList.add(userBean)
}
println(userList)
}
2: 데이터 헤더가 있는 순수 데이터 그룹 데이터 분석
{
"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)
// JsonObject
val jsonObject = sonParser().parse(userJson).asJsonObject
// JsonArray
val jsonArray = jsonObject.getAsJsonArray("muser")
val gson = Gson()
val userList = mutableListOf<UserBean>()
//
for (user in jsonArray) {
// TypeToken
val userBean =
gson.fromJson<UserBean>(
user,
object : TypeToken<UserBean>() {}.type)
userList.add(userBean)
}
print(userList)
}
요약:
1. 첫 번째와 유사하지만 다른 것은 Json Arrary를 얻은 후
Json Arrary에서 키:muser의 값을 받습니다. getas Json Array("muser")
2. 데이터를 해석할 때 Type Token을 통해 데이터 클래스를 반사합니다. 이것은 익명 내부 클래스입니다.
역할은list와 같은 일반적인 정보를 얻는 것이다.스스로 뇌를 보충하다
3: 데이터 헤더가 있는 복잡수
{
"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은 이렇게 두 개의 데이터 클래스로 구성되어 있습니다. 만약에 UserBean에 List가 있다면 OtherBean 데이터 클래스를 하나 만들 수 있습니다.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() {
// json
val resultJson=CityApi.instance.getOriginalFundData(this)
// Gson
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
}
/**
* input
*/
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
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
위챗 애플릿의 간단한 로그인 페이지 이동
우선 APP에 tapbar를 설정합니다.js에서 관련 데이터 사용자의 정보를 설정합니다.
login 페이지는 귀속 데이터가 필요합니다.사용자 이름
로그인 이벤트 바인딩하기;
사용자 정보를 표시하는 사용자 페이지use...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
[
{
"name": "zhangsan",
"age": "10",
"phone": "11111",
"email": "[email protected]"
},
{
"name": "lisi",
"age": "20",
"phone": "22222",
"email": "[email protected]"
},
...
]
data class UserBean(
val name:String,
val age:String,
val phone:Strin,
val emall:String,
)
fun parseNoHeaderJArray(){
//**********Json *************
// user.json
val userJson=UserApi.instance.getOriginalFunData(this)
//
val userJson=JsonToStringUtil.getStringByJson(this, R.raw.juser_1)
//**********JsonArray *************
// json JsonParser
val parser=JsonParser()
// Json JsonArray
val JsonArray=parser.parser(userJson).asJsonArray
//**********Gson *************
//Gson
val gson=Gson()
val userList=mutableListOf<UserBean>()
// userList
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)
// JsonObject
val jsonObject = sonParser().parse(userJson).asJsonObject
// JsonArray
val jsonArray = jsonObject.getAsJsonArray("muser")
val gson = Gson()
val userList = mutableListOf<UserBean>()
//
for (user in jsonArray) {
// TypeToken
val userBean =
gson.fromJson<UserBean>(
user,
object : TypeToken<UserBean>() {}.type)
userList.add(userBean)
}
print(userList)
}
{
"code": 200,
"msg": "OK",
"muser": [
{
"name": "zhangsan",
"age": "10",
"phone": "11111",
"email": "[email protected]"
},
{
"name": "lisi",
"age": "20",
"phone": "22222",
"email": "[email protected]"
},
...
]
}
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
)
fun parseHaveHeaderJArray() {
// json
val resultJson=CityApi.instance.getOriginalFundData(this)
// Gson
val resultBean=
Gson().fromJson(resultJson,ResultBean::class.java)
//
val userBeanList=resultBean.muser
//
print(userBeanList)
}
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
}
/**
* input
*/
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
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
위챗 애플릿의 간단한 로그인 페이지 이동우선 APP에 tapbar를 설정합니다.js에서 관련 데이터 사용자의 정보를 설정합니다. login 페이지는 귀속 데이터가 필요합니다.사용자 이름 로그인 이벤트 바인딩하기; 사용자 정보를 표시하는 사용자 페이지use...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.