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
        }

    }

}

  最后一种是自定义式解析,因为项目中的jsonString可以非常复杂,所以要自己定义一个类,然后用类似的方法来解析即可。

  因为我博客名也叫做Jason_Jan对于json还是比较情有独钟的,可以说json真的很棒

  

  推荐两个第三方库

  Ason=====github链接:https://github.com/afollestad/ason

  GsonFormat=====github链接:https://github.com/zzz40500/GsonFormat

时间: 2024-11-10 15:42:38

android json 解析 kotlin的相关文章

Android Json解析Kotlin

1. 首先讲一下什么是Json--下面的就是Json基本格式,其实就是一个键值对. { "people": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, { "firstName": "Jason", "lastName&qu

android:json解析的两个工具:Gson和Jackson的使用小例子

1.简介 json是android与服务器通信过程中常用的数据格式,例如,如下是一个json格式的字符串: {"address":"Nanjing","name":"NUPT","students":[{"name":"stu1","id":"10000","age":20},{"name"

【转】android json解析及简单例子

JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. – Json.org JSON Vs XML 1.JSON和XML的数据可读性基本相同 2.JSON和XML同样拥有丰富的解析手段 3.JSON相对于XML来讲,数据的体积小 4.JSON与JavaScript的交互更加方便

android json解析及简单例子(转载)

android json解析及简单例子 JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. – Json.org JSON Vs XML 1.JSON和XML的数据可读性基本相同 2.JSON和XML同样拥有丰富的解析手段 3.JSON相对于XML来讲,数据的体积小 4.JS

android Json解析详解

JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语 言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为– Json.org JSON Vs XML 1.JSON和XML的数据可读性基本相同 2.JSON和XML同样拥有丰富的解析手段 3.JSON相对于XML来讲,数据的体积小 4.JSON与JavaScript的交互更加方便

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的好用,今天我们为了博客的保质保量,也就不分开写,我们直接拿比较火的Gson和Fast-json来使用,末尾在进行一些分析 Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 一.各有千秋 两大解析库的东家都是巨头,一个来自于Google官方,一个来自阿里巴巴,我们这

android Json 解析 JSONObject JSONArray

android Json 解析  JSONObject JSONArray 我只解析了一个,不管有多少个都以此方法类推,加上http://blog.csdn.net/menglele1314/article/details/46324069里的JSONArray解析,可以应付一般所以的开发了 try { String value = "{\"result\":\"S\", \"address\":[{\"shengfen\&q

Android JSON 解析库的使用 - Gson 和 fast-json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C.C++.C#.Java.JavaScript.Perl.Python等).这些特性使JSON成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率). GSON是由谷歌官方推出的 JSON 与 Java 对象转化的 Java类库 fast-json 阿里推

Android Json解析

JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习.     恰逢本人最近对json做了一个简单的学习,特此总结一下,以飨各位.     为了文章简明清晰,尽量多列点,少废话.     参考文档:http://www.ietf.org/rfc/rfc4627.txt?number=4627 1.JSON解析     (1).解析Object之一: 1 {"url":"http://www.cnblogs.com/qian