Kotlin (四) JSON解析(Klaxon 解析 data)

匿名 (未验证) 提交于 2019-12-03 00:22:01

kotlin 解析 json,直接调用 java的json库是没问题的,比如 Gson, fastjson。
但是比如 fatsjson 在解析 data 类时会报错:没有默认构造函数

//使用 compile 'com.alibaba:fastjson:1.1.68.android' 测试结果 com.alibaba.fastjson.JSONException: default constructor not found. class com.sungiven.merchant.data.httplayer.demo.A1

1、Kotson ,基于Gson 的kotlin包装
2、jackson-module-kotlin,基于jackson的包装
3、Klaxon ,纯kotlin方案
4、Jkid

本文介绍下Kotson, 主要是前期android开发 一直也使用 Gson 这个库,虽然后偷懒使用fastjson(因为对后端返回的String串容错性更强,对于fastjson的容错有写一篇:Gson 与 fastJson 在使用上的差异(fastJson的优点)

参考klaxon 的github 链接:https://github.com/cbeust/klaxon

  • 支持data 类的解析,不需要写默认值
  • 泛型解析上很方便,不再需要指出对应的TypeToken,fastjson对应的是(TypeReference)。这个真心是方便了
  • 读取 字段方便

demo

fun main(args: Array<String>) {      val jsonString = "{\"l1\":\"demo\",\"l2\":2}"     val jsonArrayString = "[{\"l1\":\"demo\",\"l2\":2},{\"l1\":\"demo\",\"l2\":2}]"       //使用fastjson 报错     try {         var a: A1 = JSONObject.parseObject(jsonString, A1::class.java)     } catch (e: Exception) {         println(e)     }       //使用java Gson的方式     try {         var s: A1 = Gson().fromJson(jsonString, A1::class.java)          println("s = $s")     } catch (e: Exception) {         println(e)     }      //使用 kotson 方式     try {         var s: A1 = Gson().fromJson(jsonString)         // var s = Gson().fromJson<A1>(jsonString)          var sarray = Gson().fromJson<List<A1>>(jsonArrayString)         //var sarray:List<A1> = Gson().fromJson(jsonArray)          println("s = $s   sarray=$sarray")     } catch (e: Exception) {         println(e)     }        //读字段     var json:JsonElement = Gson().fromJson(jsonString)     println(json["l1"])     println(json["l2"])      var json2:JsonArray = Gson().fromJson(jsonArrayString)     println(json2[0])     println(json2[0]["l1"]) }   data class A1(         val l1: String? ,         val l2: Int? ) 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!