android json 解析 kotlin
前面 寫了一次 kotlin解析json 但是,真的寫得太爛,直接刪掉了,現在重新整理一下。順便記錄一下今天坑了我很久的小問題。
1.首先從最簡單的入手吧
一個json的字符串:=====就叫做jsonString吧
{ "code": "200", "msg": "success", "debugMsg": "", "result": { "data": "1231414" } }
好了怎麽解析呢???
用一個函數即可
fun get_key_string(key:String,jsonString:String):String { var str: String= "" try { val jsonObj:JSONObject= JSONObject(jsonString) str=jsonObj.getString(key) } catch (e: JSONException) { e.printStackTrace() } return str }
怎麽用呢???
val msg=get_key_string("msg","jsonString")
第一個參數=====在json字符串中,你想要解析的key,我上面的例子有 code,msg,debugMsg,result,我選擇的是msg
第二個參數=====就是json字符串的名稱,就是一個字符串,不要想得太復雜了
msg解析後的結果=====success
2.多重解析
依舊是上面的例子吧=====json字符串名字依舊叫做jsonString
{ "code": "200", "msg": "success", "debugMsg": "", "result": { "data": "1231414" } }
我想要得到data怎麽辦呢???
很簡單,兩步即可。
val result=get_key_String("result","jsonString")//=====這裏的第二個參數依舊是jsonString
val data=get_key_String("data","result")//=====註意這裏的第二個參數已經變成了result了
3.解析整型,boolean類型
這個和解析String類型類似,直接上代碼吧
fun get_key_boolean(key:String,jsonString:String):Boolean {//解析成Boolean var str: Boolean =true try { val jsonObj:JSONObject= JSONObject(jsonString) str=jsonObj.getBoolean(key) } catch (e: JSONException) { e.printStackTrace() } return str } fun get_key_int(key:String,jsonString:String):Int {//解析成Int var str: Int=0 try { val jsonObj:JSONObject= JSONObject(jsonString) str=jsonObj.getInt(key) } catch (e: JSONException) { e.printStackTrace() } return str }
4.稍微牛逼一點的解析=====解析成List<Map<String,Any>>=====其實這個就比較通用了,很多東西直接用這個就可以了
比如來一個復雜一點的jsonString吧
{ "code": "200", "msg": "success", "debugMsg": "", "result": { "data": [ "key1": "string"
"key2": 123
"key3": true
]
}
}
這樣一個jsonString,key1對應一個字符串,key2對應一個整型,key3對應一個布爾類型
怎麽解析呢???
fun getListMap(key: String, jsonString: String): List<Map<String, Any>> { val list = ArrayList<Map<String, Any>>() try { val jsonObject = JSONObject(jsonString) val jsonArray = jsonObject.getJSONArray(key) for (i in 0..jsonArray.length() - 1) { val jsonObject2 = jsonArray.getJSONObject(i) val map = HashMap<String, Any>() val iterator = jsonObject2.keys() while (iterator.hasNext()) { val json_key = iterator.next() var json_value: Any? = jsonObject2.get(json_key) if (json_value == null) { json_value = "" } map.put(json_key, json_value) } list.add(map) } } catch (e: JSONException) { e.printStackTrace() } return list }
主要有2個步驟
val result=get_key_string("result","jsonString")
val data=getListMap("data","result")
就這麽666
5.將所有的可以用到的方法封裝起來吧
class JsonUtil { companion object { fun get_key_string(key:String,jsonString:String):String { var str: String = "" try { val jsonObj:JSONObject= JSONObject(jsonString) str=jsonObj.getString(key) } catch (e: JSONException) { e.printStackTrace() } return str } fun get_key_boolean(key:String,jsonString:String):Boolean { var str: Boolean =true try { val jsonObj:JSONObject= JSONObject(jsonString) str=jsonObj.getBoolean(key) } catch (e: JSONException) { e.printStackTrace() } return str } fun get_key_int(key:String,jsonString:String):Int { var str: Int=0 try { val jsonObj:JSONObject= JSONObject(jsonString) str=jsonObj.getInt(key) } catch (e: JSONException) { e.printStackTrace() } return str } fun getList(key: String, jsonString: String): List<String> { val list = ArrayList<String>() try { val jsonObject = JSONObject(jsonString) val jsonArray = jsonObject.getJSONArray(key) for (i in 0..jsonArray.length() - 1) { val msg = jsonArray.getString(i) list.add(msg) } } catch (e: JSONException) { e.printStackTrace() } return list } fun getListMap(key: String, jsonString: String): List<Map<String, Any>> { val list = ArrayList<Map<String, Any>>() try { val jsonObject = JSONObject(jsonString) val jsonArray = jsonObject.getJSONArray(key) for (i in 0..jsonArray.length() - 1) { val jsonObject2 = jsonArray.getJSONObject(i) val map = HashMap<String, Any>() val iterator = jsonObject2.keys() while (iterator.hasNext()) { val json_key = iterator.next() var json_value: Any? = jsonObject2.get(json_key) if (json_value == null) { json_value = "" } map.put(json_key, json_value) } list.add(map) } } catch (e: JSONException) { e.printStackTrace() } return list } fun get_ask_Item(key:String,jsonString:String): ArrayList<MyAsk>? { var myAsk=ArrayList<MyAsk>() try{ val jsonObject=JSONObject(jsonString) val jsonArray=jsonObject.getJSONArray(key) for(i in 0..jsonArray.length()-1){ val json_ask=jsonArray.getJSONObject(i) var my_ask=MyAsk() val commentCount=json_ask.getString("commentCount") val commentID=json_ask.getString("commentID") val content=json_ask.getString("content") val createTime=json_ask.getString("createTime") val gender=json_ask.getString("gender") val icon=json_ask.getString("icon") val id=json_ask.getString("id") val isFavorite=json_ask.getString("isFavorite") val isZan=json_ask.getString("isZan") val label=json_ask.getString("label") val link=json_ask.getString("link") val nickname=json_ask.getString("nickname") val publisherID=json_ask.getString("publisherID") val reward=json_ask.getString("reward") val type=json_ask.getString("type") val zan=json_ask.getString("zan") val image_array=json_ask.getJSONArray("image") var image_list:ArrayList<String>?=null for(j1 in 0..image_array.length()-1){ val image_item=image_array.getString(j1) image_list?.add(image_item) } val thumbnailImage_array=json_ask.getJSONArray("thumbnailImage") var image_list2:ArrayList<String>?=null for(j2 in 0..thumbnailImage_array.length()-1){ val image_item=thumbnailImage_array.getString(j2) image_list2?.add(image_item) } my_ask.commentID=commentID my_ask.commentCount=commentCount my_ask.content=content my_ask.createTime=createTime my_ask.gender=gender my_ask.icon=icon my_ask.id=id my_ask.favoriteIs=isFavorite my_ask.zan=zan my_ask.zanIs=isZan my_ask.label=label my_ask.link=link my_ask.nickname=nickname my_ask.publisherID=publisherID my_ask.reward=reward my_ask.type=type my_ask.image=image_list my_ask.thumbnailImage=image_list2 myAsk?.add(my_ask) } return myAsk }catch (e:JSONException){ e.printStackTrace() } return myAsk } } }View Code
最後一種是自定義式解析,因為項目中的jsonString可以非常復雜,所以要自己定義一個類,然後用類似的方法來解析即可。
因為我博客名也叫做Jason_Jan對於json還是比較情有獨鐘的,可以說json真的很棒
推薦兩個第三方庫
Ason=====github鏈接:https://github.com/afollestad/ason
GsonFormat=====github鏈接:https://github.com/zzz40500/GsonFormat
android json 解析 kotlin