Kotlin (四) JSON解析(kotson 解析 data, json泛型)

一、概述

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

二、更kotlin的方式

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

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

三、kotson 使用

参考kotson 的github 链接:https://github.com/SalomonBrys/Kotson

特点
  • 支持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?
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值