Closed zzl313703419 closed 9 months ago
小伙子,你管这叫类型匹配错误?确定不是 Json 格式规范有问题?
不好意思,多了个标点符号,但不影响结果抛出异常的,可以再试下
try {
String json = "{\"id\":\"1704391195266473986\",\"dataValList\":[\"null\"]}";
JsonBean bean = new Gson().fromJson(json, JsonBean.class);
System.out.println(1);
} catch (Exception e) {
System.out.println(2);
}
你代码上面写的是 new Gson().fromJson
,你确定这和我的框架有关系?
尴尬,我来回测试数据 为了写个demo忘记改回来了
小伙子,我现在跑出来的结果跟你的不一样,你确定用是框架的最新版本?
是最新版本,你的ArrayList里的类型设错了.是Dobule不是String
小伙子,经过实践验证,你说的这个问题确实存在,是因为框架在解析 Json 数组的时候,没有对异常做捕获,间接导致 jsonReader.endArray
方法还没有被调用,然后调用了 jsonReader.endObject
标记,所以才引发了这个问题。
小伙子,目前针对这个问题已经进行了修复,并且自测通过了,你可以下载上面的 aar 包进行测试,有问题欢迎随时和我反馈。
好的 我去测一下 有劳轮子哥了
@zzl313703419 小伙子,有发现啥问题不?
正在写一篇全方位测试 需要点时间
@zzl313703419 小伙子,测试有结论了没?
估计明天左右有结果, 我得考虑细致周全一点
经测试GsonFactory-8.2.aar.zip解决了抛异常问题, 其实这一类相似的问题有很多,而且深入的细节也很多,所以我决定写一篇全面的分析报告, 以便分析交流。我将从以下几个方面入手。
一、为什么要容错
在调用接口时,服务器会返回很多有问题的数据,比如返回的字段值为null,返回的字段类型不匹配 ( 文档约定的是对象,返回了数组 ) 等等一系列问题。其实不管在哪家公司都必然会出现这样的问题,开发阶段出现问题及时让服务器去改是最常见的做法,等上了生产后出问题甚至可以甩锅给后端 ( 是服务器json数据出问题才导致的 ,这个锅得服务器背)。对这些我们深入展开一下。
二、关于容错的思考
说一下我心目中比较好的开发方案。用kotlin的data class创建bean对象,搭配Kotlin data classes from Json可以快速生成带有默认值的对象,使用json容错库对所有null以及解析错误的情况都转换成bean对象的默认值,这里只是举了个最简单的例子。
data class Person(
val name: String = "",
val age: Int = 0,
val shoe: ArrayList<String> = arrayListOf(),
)
这是一个Person对象,当shoe字段在json中的值为null , 或者为对象、其他非数组类型时,解析后应该都是shoe = [ ],是一个空数组对象,这样我就能直接拿来使用 不用考虑null问题和解析错误问题。容错方案看似简单,但深入研究发现里面里面细节很多。下面以demo为例展开。
三、对GsonFactory测试(基于8.0版本)
1) json解析通常情况装成Bean对象、数组集合、Map集合 (JsonArray、JsonObject原理应该一样,没放入demo测试)
2) Demo中TestBean对象的数组集合、Map集合其实可以不写例子,,但测试时我发现json转bean里集合和json单独转集合报错信息是不同的,因此还是列了出来。
3) 结合实际应用中各种场景罗列了各种情况,修改多次,包括打印信息排版之类,为了放起来更清晰直观一点,例子出的有点慢主要是思路一理再理,再给出一版。应该还有其他情况没考虑到,等优化一版后我再想想看。辛苦了~
package com.example.myapplication
import com.google.gson.reflect.TypeToken
import com.hjq.gson.factory.GsonFactory
import java.math.BigDecimal
/**
* Bean 类
*/
data class TestBean(
//基础类型
val base_1: String = "",
val base_2: Boolean = false,
val base_3: Int = 0,
val base_4: Long = 0L,
val base_5: Float = 0.0f,
val base_6: Double = 0.0,
val base_7: BigDecimal = BigDecimal(0),
//数组集合
val list_1: ArrayList<Any> = arrayListOf(),
val list_2: ArrayList<String> = arrayListOf(),
val list_3: ArrayList<Boolean> = arrayListOf(),
val list_4: ArrayList<Int> = arrayListOf(),
val list_5: ArrayList<Long> = arrayListOf(),
val list_6: ArrayList<Float> = arrayListOf(),
val list_7: ArrayList<Double> = arrayListOf(),
val list_8: ArrayList<BigDecimal> = arrayListOf(),
val list_9: ArrayList<TestBean> = arrayListOf(),
val list_10: ArrayList<ArrayList<Any>> = arrayListOf(),
val list_11: ArrayList<HashMap<String, Any>> = arrayListOf(),
//Map集合
val map_1: HashMap<String, Any> = hashMapOf(),
val map_2: HashMap<String, String> = hashMapOf(),
val map_3: HashMap<String, Boolean> = hashMapOf(),
val map_4: HashMap<String, Int> = hashMapOf(),
val map_5: HashMap<String, Long> = hashMapOf(),
val map_6: HashMap<String, Float> = hashMapOf(),
val map_7: HashMap<String, Double> = hashMapOf(),
val map_8: HashMap<String, BigDecimal> = hashMapOf(),
val map_9: HashMap<String, TestBean> = hashMapOf(),
val map_10: HashMap<String, ArrayList<Any>> = hashMapOf(),
val map_11: HashMap<String, HashMap<String, Any>> = hashMapOf(),
)
/**
* 容错的范围
* 新增了"\"字符串\"",因经测试发现空字符串和有字符串的情况下,测试表现不同
*/
private val faultRange = arrayListOf(null, "\"\"", "\"字符串\"", false, 0, 0.0, "{}", "[]")
fun main() {
/****** 数组集合 ******/
//数组集合-外层容错
sample_1_by_list() //结果: ❌
//数组集合-泛型容错<String>
sample_2_by_list() //结果: ❌
//数组集合-泛型容错<Boolean>
sample_3_by_list() //结果: ❌
//数组集合-泛型容错<Int>
sample_4_by_list() //结果: ❌
//数组集合-泛型容错<Long>
sample_5_by_list() //结果: ❌
//数组集合-泛型容错<Float>
sample_6_by_list() //结果: ❌
//数组集合-泛型容错<Double>
sample_7_by_list() //结果: ❌
//数组集合-泛型容错<BigDecimal>
sample_8_by_list() //结果: ❌
//数组集合-泛型容错<Bean对象>
sample_9_by_list() //结果: ❌
//数组集合-泛型容错<数组集合>
sample_10_by_list() //结果: ❌
//数组集合-泛型容错<Map集合>
sample_11_by_list() //结果: ❌
/****** Map集合 ******/
//Map集合-外层容错
sample_1_by_map() //结果: ❌
//Map集合-泛型容错<String,String>
sample_2_by_map() //结果: ❌
//Map集合-泛型容错<String,Boolean>
sample_3_by_map() //结果: ❌
//Map集合-泛型容错<String,Int>
sample_4_by_map() //结果: ❌
//Map集合-泛型容错<String,Long>
sample_5_by_map() //结果: ❌
//Map集合-泛型容错<String,Float>
sample_6_by_map() //结果: ❌
//Map集合-泛型容错<String,Double>
sample_7_by_map() //结果: ❌
//Map集合-泛型容错<String,BigDecimal>
sample_8_by_map() //结果: ❌
//Map集合-泛型容错<String,Bean对象>
sample_9_by_map() //结果: ❌
//Map集合-泛型容错<String,数组集合>
sample_10_by_map() //结果: ❌
//Map集合-泛型容错<String,Map集合>
sample_11_by_map() //结果: ❌
/****** Bean类 ******/
//Bean类-基本类型(String)
sample_1_base_by_bean() //结果: ✅
//Bean类-基本类型(Boolean)
sample_2_base_by_bean() //结果: ✅
//Bean类-基本类型(Int)
sample_3_base_by_bean() //结果: ✅
//Bean类-基本类型(Long)
sample_4_base_by_bean() //结果: ✅
//Bean类-基本类型(Float)
sample_5_base_by_bean() //结果: ✅
//Bean类-基本类型(Double)
sample_6_base_by_bean() //结果: ✅
//Bean类-基本类型(BigDecimal)
sample_7_base_by_bean() //结果: ✅
//Bean类-数组集合-外层容错
sample_1_list_by_bean() //结果: ✅
//Bean类-数组集合-泛型容错<String>
sample_2_list_by_bean() //结果: ❌
//Bean类-数组集合-泛型容错<Boolean>
sample_3_list_by_bean() //结果: ❌
//Bean类-数组集合-泛型容错<Int>
sample_4_list_by_bean() //结果: ❌
//Bean类-数组集合-泛型容错<Long>
sample_5_list_by_bean() //结果: ❌
//Bean类-数组集合-泛型容错<Float>
sample_6_list_by_bean() //结果: ❌
//Bean类-数组集合-泛型容错<Double>
sample_7_list_by_bean() //结果: ❌
//Bean类-数组集合-泛型容错<BigDecimal>
sample_8_list_by_bean() //结果: ❌
//Bean类-数组集合-泛型容错<Bean对象>
sample_9_list_by_bean() //结果: ❌
//Bean类-数组集合-泛型容错<数组集合>
sample_10_list_by_bean() //结果: ❌
//Bean类-数组集合-泛型容错<Map集合>
sample_11_list_by_bean() //结果: ❌
//Bean类-Map集合-外层容错
sample_1_map_by_bean() //结果: ✅
//Bean类-Map集合-泛型容错<String,String>
sample_2_map_by_bean() //结果: ❌
//Bean类-Map集合-泛型容错<String,Boolean>
sample_3_map_by_bean() //结果: ❌
//Bean类-Map集合-泛型容错<String,Int>
sample_4_map_by_bean() //结果: ❌
//Bean类-Map集合-泛型容错<String,Long>
sample_5_map_by_bean() //结果: ❌
//Bean类-Map集合-泛型容错<String,Float>
sample_6_map_by_bean() //结果: ❌
//Bean类-Map集合-泛型容错<String,Double>
sample_7_map_by_bean() //结果: ❌
//Bean类-Map集合-泛型容错<String,BigDecimal>
sample_8_map_by_bean() //结果: ❌
//Bean类-Map集合-泛型容错<String,Bean对象>
sample_9_map_by_bean() //结果: ❌
//Bean类-Map集合-泛型容错<String,数组集合>
sample_10_map_by_bean() //结果: ❌
//Bean类-Map集合-泛型容错<String,Map集合>
sample_11_map_by_bean() //结果: ❌
}
fun sample_1_by_list() {
println("数组集合-外层容错")
faultRange.forEachIndexed { index, it ->
val json = "${it}"
try {
val bean = GsonFactory.getSingletonGson().fromJson<ArrayList<Any>>(json, object : TypeToken<ArrayList<Any>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① null -> null
//② "" -> null
//③ "字符串" -> null
//④ false -> null
//⑤ 0 -> null
//⑥ 0.0 -> null
//⑦ {} -> null
//⑧ [] -> []
//验证是否通过: ❌ 第1、2、3、4、5、6、7 结果不对
//建议: 解析成ArrayList时, 类型不匹配会返回null, 但在其他地方则不会null, 比如bean对象中的list。不兼容的话在调用时还是会null空指针的 ,后续凡是返回有null值的 ,参考这条。
}
fun sample_2_by_list() {
println("数组集合-泛型容错<String>")
faultRange.forEachIndexed { index, it ->
val json = "[${it}]"
try {
val bean = GsonFactory.getSingletonGson().fromJson<ArrayList<String>>(json, object : TypeToken<ArrayList<String>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① [null] -> [null]
//② [""] -> [""]
//③ ["字符串"] -> ["字符串"]
//④ [false] -> ["false"]
//⑤ [0] -> ["0"]
//⑥ [0.0] -> ["0.0"]
//⑦ [{}] -> java.lang.IllegalArgumentException
//⑧ [[]] -> java.lang.IllegalArgumentException
//验证是否通过: ❌ 第1、7、8 结果不对
}
fun sample_3_by_list() {
println("数组集合-泛型容错<Boolean>")
faultRange.forEachIndexed { index, it ->
val json = "[${it}]"
try {
val bean = GsonFactory.getSingletonGson().fromJson<ArrayList<Boolean>>(json, object : TypeToken<ArrayList<Boolean>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① [null] -> [null]
//② [""] -> [false]
//③ ["字符串"] -> [false]
//④ [false] -> [false]
//⑤ [0] -> [false]
//⑥ [0.0] -> [false]
//⑦ [{}] -> java.lang.IllegalArgumentException
//⑧ [[]] -> java.lang.IllegalArgumentException
//验证是否通过: ❌ 第1、7、8 结果不对
}
fun sample_4_by_list() {
println("数组集合-泛型容错<Int>")
faultRange.forEachIndexed { index, it ->
val json = "[${it}]"
try {
val bean = GsonFactory.getSingletonGson().fromJson<ArrayList<Int>>(json, object : TypeToken<ArrayList<Int>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① [null] -> [null]
//② [""] -> [0]
//③ ["字符串"] -> java.lang.NumberFormatException: Character 字 is neither a decimal digit number, decimal point, nor "e" notation exponential mark.
//④ [false] -> java.lang.IllegalArgumentException
//⑤ [0] -> [0]
//⑥ [0.0] -> [0]
//⑦ [{}] -> java.lang.IllegalArgumentException
//⑧ [[]] -> java.lang.IllegalArgumentException
//验证是否通过: ❌ 第1、3、4、7、8 结果不对
}
fun sample_5_by_list() {
println("数组集合-泛型容错<Long>")
faultRange.forEachIndexed { index, it ->
val json = "[${it}]"
try {
val bean = GsonFactory.getSingletonGson().fromJson<ArrayList<Long>>(json, object : TypeToken<ArrayList<Long>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① [null] -> [null]
//② [""] -> [0]
//③ ["字符串"] -> java.lang.NumberFormatException: Character 字 is neither a decimal digit number, decimal point, nor "e" notation exponential mark.
//④ [false] -> java.lang.IllegalArgumentException
//⑤ [0] -> [0]
//⑥ [0.0] -> [0]
//⑦ [{}] -> java.lang.IllegalArgumentException
//⑧ [[]] -> java.lang.IllegalArgumentException
//验证是否通过: ❌ 第1、3、4、7、8 结果不对
}
fun sample_6_by_list() {
println("数组集合-泛型容错<Float>")
faultRange.forEachIndexed { index, it ->
val json = "[${it}]"
try {
val bean = GsonFactory.getSingletonGson().fromJson<ArrayList<Float>>(json, object : TypeToken<ArrayList<Float>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① [null] -> [null]
//② [""] -> [0.0]
//③ ["字符串"] -> java.lang.NumberFormatException: For input string: "字符串"
//④ [false] -> java.lang.IllegalArgumentException
//⑤ [0] -> [0.0]
//⑥ [0.0] -> [0.0]
//⑦ [{}] -> java.lang.IllegalArgumentException
//⑧ [[]] -> java.lang.IllegalArgumentException
//验证是否通过: ❌ 第1、3、4、7、8 结果不对
}
fun sample_7_by_list() {
println("数组集合-泛型容错<Double>")
faultRange.forEachIndexed { index, it ->
val json = "[${it}]"
try {
val bean = GsonFactory.getSingletonGson().fromJson<ArrayList<Double>>(json, object : TypeToken<ArrayList<Double>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① [null] -> [null]
//② [""] -> [0.0]
//③ ["字符串"] -> java.lang.NumberFormatException: For input string: "字符串"
//④ [false] -> java.lang.IllegalArgumentException
//⑤ [0] -> [0.0]
//⑥ [0.0] -> [0.0]
//⑦ [{}] -> java.lang.IllegalArgumentException
//⑧ [[]] -> java.lang.IllegalArgumentException
//验证是否通过: ❌ 第1、3、4、7、8 结果不对
}
fun sample_8_by_list() {
println("数组集合-泛型容错<BigDecimal>")
faultRange.forEachIndexed { index, it ->
val json = "[${it}]"
try {
val bean = GsonFactory.getSingletonGson().fromJson<ArrayList<BigDecimal>>(json, object : TypeToken<ArrayList<BigDecimal>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① [null] -> [null]
//② [""] -> [0]
//③ ["字符串"] -> java.lang.NumberFormatException: Character 字 is neither a decimal digit number, decimal point, nor "e" notation exponential mark.
//④ [false] -> [null]
//⑤ [0] -> [0]
//⑥ [0.0] -> [0.0]
//⑦ [{}] -> [null]
//⑧ [[]] -> [null]
//验证是否通过: ❌ 第1、3、4、7、8 结果不对
}
fun sample_9_by_list() {
println("数组集合-泛型容错<Bean对象>")
faultRange.forEachIndexed { index, it ->
val json = "[${it}]"
try {
val bean = GsonFactory.getSingletonGson().fromJson<ArrayList<TestBean>>(json, object : TypeToken<ArrayList<TestBean>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① [null] -> [null]
//② [""] -> [null]
//③ ["字符串"] -> [null]
//④ [false] -> [null]
//⑤ [0] -> [null]
//⑥ [0.0] -> [null]
//⑦ [{}] -> [{"base_1":"","base_2":false,"base_3":0,"base_4":0,"base_5":0.0,"base_6":0.0,"base_7":0,"list_1":[],"list_2":[],"list_3":[],"list_4":[],"list_5":[],"list_6":[],"list_7":[],"list_8":[],"list_9":[],"list_10":[],"list_11":[],"map_1":{},"map_2":{},"map_3":{},"map_4":{},"map_5":{},"map_6":{},"map_7":{},"map_8":{},"map_9":{},"map_10":{},"map_11":{}}]
//⑧ [[]] -> [null]
//验证是否通过: ❌ 第1、2、3、4、5、6、8 结果不对
}
fun sample_10_by_list() {
println("数组集合-泛型容错<数组集合>")
faultRange.forEachIndexed { index, it ->
val json = "[${it}]"
try {
val bean = GsonFactory.getSingletonGson().fromJson<ArrayList<ArrayList<Any>>>(json, object : TypeToken<ArrayList<ArrayList<Any>>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① [null] -> [null]
//② [""] -> [null]
//③ ["字符串"] -> [null]
//④ [false] -> [null]
//⑤ [0] -> [null]
//⑥ [0.0] -> [null]
//⑦ [{}] -> [null]
//⑧ [[]] -> [[]]
//验证是否通过: ❌ 第1、2、3、4、5、6、7 结果不对
}
fun sample_11_by_list() {
println("数组集合-泛型容错<Map集合>")
faultRange.forEachIndexed { index, it ->
val json = "[${it}]"
try {
val bean = GsonFactory.getSingletonGson().fromJson<ArrayList<HashMap<String, Any>>>(json, object : TypeToken<ArrayList<HashMap<String, Any>>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① [null] -> [null]
//② [""] -> [{}]
//③ ["字符串"] -> [{}]
//④ [false] -> [{}]
//⑤ [0] -> [{}]
//⑥ [0.0] -> [{}]
//⑦ [{}] -> [{}]
//⑧ [[]] -> [{}]
//验证是否通过: ❌ 第1 结果不对
}
fun sample_1_by_map() {
println("Map集合-外层容错")
faultRange.forEachIndexed { index, it ->
val json = "${it}"
try {
val bean = GsonFactory.getSingletonGson().fromJson<HashMap<String, Any>>(json, object : TypeToken<HashMap<String, Any>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① null -> null
//② "" -> {}
//③ "字符串" -> {}
//④ false -> {}
//⑤ 0 -> {}
//⑥ 0.0 -> {}
//⑦ {} -> {}
//⑧ [] -> {}
//验证是否通过: ❌ 第1 结果不对
}
fun sample_2_by_map() {
println("Map集合-泛型容错<String,String>")
faultRange.forEachIndexed { index, it ->
val json = "{${it}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson<HashMap<String, String>>(json, object : TypeToken<HashMap<String, String>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {null} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7 path $.
//② {""} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 5 path $.
//③ {"字符串"} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//④ {false} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//⑤ {0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 4 path $.
//⑥ {0.0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 6 path $.
//⑦ {{}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//⑧ {[]} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_3_by_map() {
println("Map集合-泛型容错<String,Boolean>")
faultRange.forEachIndexed { index, it ->
val json = "{${it}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson<HashMap<String, Boolean>>(json, object : TypeToken<HashMap<String, Boolean>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {null} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7 path $.
//② {""} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 5 path $.
//③ {"字符串"} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//④ {false} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//⑤ {0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 4 path $.
//⑥ {0.0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 6 path $.
//⑦ {{}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//⑧ {[]} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_4_by_map() {
println("Map集合-泛型容错<String,Int>")
faultRange.forEachIndexed { index, it ->
val json = "{${it}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson<HashMap<String, Int>>(json, object : TypeToken<HashMap<String, Int>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {null} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7 path $.
//② {""} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 5 path $.
//③ {"字符串"} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//④ {false} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//⑤ {0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 4 path $.
//⑥ {0.0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 6 path $.
//⑦ {{}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//⑧ {[]} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_5_by_map() {
println("Map集合-泛型容错<String,Long>")
faultRange.forEachIndexed { index, it ->
val json = "{${it}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson<HashMap<String, Long>>(json, object : TypeToken<HashMap<String, Long>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {null} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7 path $.
//② {""} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 5 path $.
//③ {"字符串"} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//④ {false} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//⑤ {0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 4 path $.
//⑥ {0.0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 6 path $.
//⑦ {{}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//⑧ {[]} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_6_by_map() {
println("Map集合-泛型容错<String,Float>")
faultRange.forEachIndexed { index, it ->
val json = "{${it}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson<HashMap<String, Float>>(json, object : TypeToken<HashMap<String, Float>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {null} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7 path $.
//② {""} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 5 path $.
//③ {"字符串"} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//④ {false} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//⑤ {0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 4 path $.
//⑥ {0.0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 6 path $.
//⑦ {{}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//⑧ {[]} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_7_by_map() {
println("Map集合-泛型容错<String,Double>")
faultRange.forEachIndexed { index, it ->
val json = "{${it}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson<HashMap<String, Double>>(json, object : TypeToken<HashMap<String, Double>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {null} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7 path $.
//② {""} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 5 path $.
//③ {"字符串"} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//④ {false} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//⑤ {0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 4 path $.
//⑥ {0.0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 6 path $.
//⑦ {{}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//⑧ {[]} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_8_by_map() {
println("Map集合-泛型容错<String,BigDecimal>")
faultRange.forEachIndexed { index, it ->
val json = "{${it}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson<HashMap<String, BigDecimal>>(json, object : TypeToken<HashMap<String, BigDecimal>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {null} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7 path $.
//② {""} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 5 path $.
//③ {"字符串"} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//④ {false} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//⑤ {0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 4 path $.
//⑥ {0.0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 6 path $.
//⑦ {{}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//⑧ {[]} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_9_by_map() {
println("Map集合-泛型容错<String,Bean对象>")
faultRange.forEachIndexed { index, it ->
val json = "{${it}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson<HashMap<String, TestBean>>(json, object : TypeToken<HashMap<String, TestBean>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {null} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7 path $.
//② {""} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 5 path $.
//③ {"字符串"} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//④ {false} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//⑤ {0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 4 path $.
//⑥ {0.0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 6 path $.
//⑦ {{}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//⑧ {[]} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_10_by_map() {
println("Map集合-泛型容错<String,数组集合>")
faultRange.forEachIndexed { index, it ->
val json = "{${it}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson<HashMap<String, ArrayList<Any>>>(json, object : TypeToken<HashMap<String, TestBean>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {null} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7 path $.
//② {""} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 5 path $.
//③ {"字符串"} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//④ {false} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//⑤ {0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 4 path $.
//⑥ {0.0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 6 path $.
//⑦ {{}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//⑧ {[]} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_11_by_map() {
println("Map集合-泛型容错<String,Map集合>")
faultRange.forEachIndexed { index, it ->
val json = "{${it}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson<HashMap<String, HashMap<String, Any>>>(json, object : TypeToken<HashMap<String, HashMap<String, Any>>>() {}.type)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(bean))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {null} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7 path $.
//② {""} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 5 path $.
//③ {"字符串"} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//④ {false} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.
//⑤ {0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 4 path $.
//⑥ {0.0} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 6 path $.
//⑦ {{}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//⑧ {[]} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_1_base_by_bean() {
println("Bean类-基本类型(String)")
faultRange.forEachIndexed { index, it ->
val json = "{\"base_1\":${it}}";
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("base_1" to bean.base_1)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"base_1":null} -> {"base_1":""}
//② {"base_1":""} -> {"base_1":""}
//③ {"base_1":"字符串"} -> {"base_1":"字符串"}
//④ {"base_1":false} -> {"base_1":"false"}
//⑤ {"base_1":0} -> {"base_1":"0"}
//⑥ {"base_1":0.0} -> {"base_1":"0.0"}
//⑦ {"base_1":{}} -> {"base_1":""}
//⑧ {"base_1":[]} -> {"base_1":""}
//验证是否通过: ✅
}
fun sample_2_base_by_bean() {
println("Bean类-基本类型(Boolean)")
faultRange.forEachIndexed { index, it ->
val json = "{\"base_2\":${it}}";
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("base_2" to bean.base_2)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"base_2":null} -> {"base_2":false}
//② {"base_2":""} -> {"base_2":false}
//③ {"base_2":"字符串"} -> {"base_2":false}
//④ {"base_2":false} -> {"base_2":false}
//⑤ {"base_2":0} -> {"base_2":false}
//⑥ {"base_2":0.0} -> {"base_2":false}
//⑦ {"base_2":{}} -> {"base_2":false}
//⑧ {"base_2":[]} -> {"base_2":false}
//验证是否通过: ✅
}
fun sample_3_base_by_bean() {
println("Bean类-基本类型(Int)")
faultRange.forEachIndexed { index, it ->
val json = "{\"base_3\":${it}}";
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("base_3" to bean.base_3)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"base_3":null} -> {"base_3":0}
//② {"base_3":""} -> {"base_3":0}
//③ {"base_3":"字符串"} -> {"base_3":0}
//④ {"base_3":false} -> {"base_3":0}
//⑤ {"base_3":0} -> {"base_3":0}
//⑥ {"base_3":0.0} -> {"base_3":0}
//⑦ {"base_3":{}} -> {"base_3":0}
//⑧ {"base_3":[]} -> {"base_3":0}
//验证是否通过: ✅
}
fun sample_4_base_by_bean() {
println("Bean类-基本类型(Long)")
faultRange.forEachIndexed { index, it ->
val json = "{\"base_4\":${it}}";
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("base_4" to bean.base_4)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"base_4":null} -> {"base_4":0}
//② {"base_4":""} -> {"base_4":0}
//③ {"base_4":"字符串"} -> {"base_4":0}
//④ {"base_4":false} -> {"base_4":0}
//⑤ {"base_4":0} -> {"base_4":0}
//⑥ {"base_4":0.0} -> {"base_4":0}
//⑦ {"base_4":{}} -> {"base_4":0}
//⑧ {"base_4":[]} -> {"base_4":0}
//验证是否通过: ✅
}
fun sample_5_base_by_bean() {
println("Bean类-基本类型(Float)")
faultRange.forEachIndexed { index, it ->
val json = "{\"base_5\":${it}}";
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("base_5" to bean.base_5)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"base_5":null} -> {"base_5":0.0}
//② {"base_5":""} -> {"base_5":0.0}
//③ {"base_5":"字符串"} -> {"base_5":0.0}
//④ {"base_5":false} -> {"base_5":0.0}
//⑤ {"base_5":0} -> {"base_5":0.0}
//⑥ {"base_5":0.0} -> {"base_5":0.0}
//⑦ {"base_5":{}} -> {"base_5":0.0}
//⑧ {"base_5":[]} -> {"base_5":0.0}
//验证是否通过: ✅
}
fun sample_6_base_by_bean() {
println("Bean类-基本类型(Double)")
faultRange.forEachIndexed { index, it ->
val json = "{\"base_6\":${it}}";
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("base_6" to bean.base_6)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"base_6":null} -> {"base_6":0.0}
//② {"base_6":""} -> {"base_6":0.0}
//③ {"base_6":"字符串"} -> {"base_6":0.0}
//④ {"base_6":false} -> {"base_6":0.0}
//⑤ {"base_6":0} -> {"base_6":0.0}
//⑥ {"base_6":0.0} -> {"base_6":0.0}
//⑦ {"base_6":{}} -> {"base_6":0.0}
//⑧ {"base_6":[]} -> {"base_6":0.0}
//验证是否通过: ✅
}
fun sample_7_base_by_bean() {
println("Bean类-基本类型(BigDecimal)")
faultRange.forEachIndexed { index, it ->
val json = "{\"base_7\":${it}}";
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("base_7" to bean.base_7)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//Bean类-基本类型(BigDecimal)
//① {"base_7":null} -> {"base_7":0}
//② {"base_7":""} -> {"base_7":0}
//③ {"base_7":"字符串"} -> {"base_7":0}
//④ {"base_7":false} -> {"base_7":0}
//⑤ {"base_7":0} -> {"base_7":0}
//⑥ {"base_7":0.0} -> {"base_7":0.0}
//⑦ {"base_7":{}} -> {"base_7":0}
//⑧ {"base_7":[]} -> {"base_7":0}
//验证是否通过: ✅
}
fun sample_1_list_by_bean() {
println("Bean类-数组集合-外层容错")
faultRange.forEachIndexed { index, it ->
val json = "{\"list_1\":${it}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("list_1" to bean.list_1)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"list_1":null} -> {"list_1":[]}
//② {"list_1":""} -> {"list_1":[]}
//③ {"list_1":"字符串"} -> {"list_1":[]}
//④ {"list_1":false} -> {"list_1":[]}
//⑤ {"list_1":0} -> {"list_1":[]}
//⑥ {"list_1":0.0} -> {"list_1":[]}
//⑦ {"list_1":{}} -> {"list_1":[]}
//⑧ {"list_1":[]} -> {"list_1":[]}
//验证是否通过: ✅
}
fun sample_2_list_by_bean() {
println("Bean类-数组集合-泛型容错<String>")
faultRange.forEachIndexed { index, it ->
val json = "{\"list_2\":[${it}]}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("list_2" to bean.list_2)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"list_2":[null]} -> {"list_2":[null]}
//② {"list_2":[""]} -> {"list_2":[""]}
//③ {"list_2":["字符串"]} -> {"list_2":["字符串"]}
//④ {"list_2":[false]} -> {"list_2":["false"]}
//⑤ {"list_2":[0]} -> {"list_2":["0"]}
//⑥ {"list_2":[0.0]} -> {"list_2":["0.0"]}
//⑦ {"list_2":[{}]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_2[1]
//⑧ {"list_2":[[]]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_2[1]
//验证是否通过: ❌ 第1、7、8结果不对
}
fun sample_3_list_by_bean() {
println("Bean类-数组集合-泛型容错<Boolean>")
faultRange.forEachIndexed { index, it ->
val json = "{\"list_3\":[${it}]}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("list_3" to bean.list_3)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"list_3":[null]} -> {"list_3":[null]}
//② {"list_3":[""]} -> {"list_3":[false]}
//③ {"list_3":["字符串"]} -> {"list_3":[false]}
//④ {"list_3":[false]} -> {"list_3":[false]}
//⑤ {"list_3":[0]} -> {"list_3":[false]}
//⑥ {"list_3":[0.0]} -> {"list_3":[false]}
//⑦ {"list_3":[{}]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_3[1]
//⑧ {"list_3":[[]]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_3[1]
//验证是否通过: ❌ 第1、7、8结果不对
}
fun sample_4_list_by_bean() {
println("Bean类-数组集合-泛型容错<Int>")
faultRange.forEachIndexed { index, it ->
val json = "{\"list_4\":[${it}]}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("list_4" to bean.list_4)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"list_4":[null]} -> {"list_4":[null]}
//② {"list_4":[""]} -> {"list_4":[0]}
//③ {"list_4":["字符串"]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 18 path $.list_4[1]
//④ {"list_4":[false]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 18 path $.list_4[1]
//⑤ {"list_4":[0]} -> {"list_4":[0]}
//⑥ {"list_4":[0.0]} -> {"list_4":[0]}
//⑦ {"list_4":[{}]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_4[1]
//⑧ {"list_4":[[]]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_4[1]
//验证是否通过: ❌ 第1、3、4、7、8 结果不对
}
fun sample_5_list_by_bean() {
println("Bean类-数组集合-泛型容错<Long>")
faultRange.forEachIndexed { index, it ->
val json = "{\"list_5\":[${it}]}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("list_5" to bean.list_5)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"list_5":[null]} -> {"list_5":[null]}
//② {"list_5":[""]} -> {"list_5":[0]}
//③ {"list_5":["字符串"]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 18 path $.list_5[1]
//④ {"list_5":[false]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 18 path $.list_5[1]
//⑤ {"list_5":[0]} -> {"list_5":[0]}
//⑥ {"list_5":[0.0]} -> {"list_5":[0]}
//⑦ {"list_5":[{}]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_5[1]
//⑧ {"list_5":[[]]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_5[1]
//验证是否通过: ❌ 第1、3、4、7、8 结果不对
}
fun sample_6_list_by_bean() {
println("Bean类-数组集合-泛型容错<Float>")
faultRange.forEachIndexed { index, it ->
val json = "{\"list_6\":[${it}]}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("list_6" to bean.list_6)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"list_6":[null]} -> {"list_6":[null]}
//② {"list_6":[""]} -> {"list_6":[0.0]}
//③ {"list_6":["字符串"]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 18 path $.list_6[1]
//④ {"list_6":[false]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 18 path $.list_6[1]
//⑤ {"list_6":[0]} -> {"list_6":[0.0]}
//⑥ {"list_6":[0.0]} -> {"list_6":[0.0]}
//⑦ {"list_6":[{}]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_6[1]
//⑧ {"list_6":[[]]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_6[1]
//验证是否通过: ❌ 第1、3、4、7、8 结果不对
}
fun sample_7_list_by_bean() {
println("Bean类-数组集合-泛型容错<Double>")
faultRange.forEachIndexed { index, it ->
val json = "{\"list_7\":[${it}]}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("list_7" to bean.list_7)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"list_7":[null]} -> {"list_7":[null]}
//② {"list_7":[""]} -> {"list_7":[0.0]}
//③ {"list_7":["字符串"]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 18 path $.list_7[1]
//④ {"list_7":[false]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 18 path $.list_7[1]
//⑤ {"list_7":[0]} -> {"list_7":[0.0]}
//⑥ {"list_7":[0.0]} -> {"list_7":[0.0]}
//⑦ {"list_7":[{}]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_7[1]
//⑧ {"list_7":[[]]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_7[1]
//验证是否通过: ❌ 第1、3、4、7、8 结果不对
}
fun sample_8_list_by_bean() {
println("Bean类-数组集合-泛型容错<BigDecimal>")
faultRange.forEachIndexed { index, it ->
val json = "{\"list_8\":[${it}]}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("list_8" to bean.list_8)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"list_8":[null]} -> {"list_8":[null]}
//② {"list_8":[""]} -> {"list_8":[0]}
//③ {"list_8":["字符串"]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 18 path $.list_8[1]
//④ {"list_8":[false]} -> {"list_8":[null]}
//⑤ {"list_8":[0]} -> {"list_8":[0]}
//⑥ {"list_8":[0.0]} -> {"list_8":[0.0]}
//⑦ {"list_8":[{}]} -> {"list_8":[null]}
//⑧ {"list_8":[[]]} -> {"list_8":[null]}
//验证是否通过: ❌ 第1、3、4、6、7、8 结果不对
}
fun sample_9_list_by_bean() {
println("Bean类-数组集合-泛型容错<Bean对象>")
faultRange.forEachIndexed { index, it ->
val json = "{\"list_9\":[${it}]}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("list_9" to bean.list_9)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"list_9":[null]} -> {"list_9":[null]}
//② {"list_9":[""]} -> {"list_9":[null]}
//③ {"list_9":["字符串"]} -> {"list_9":[null]}
//④ {"list_9":[false]} -> {"list_9":[null]}
//⑤ {"list_9":[0]} -> {"list_9":[null]}
//⑥ {"list_9":[0.0]} -> {"list_9":[null]}
//⑦ {"list_9":[{}]} -> {"list_9":[{"base_1":"","base_2":false,"base_3":0,"base_4":0,"base_5":0.0,"base_6":0.0,"base_7":0,"list_1":[],"list_2":[],"list_3":[],"list_4":[],"list_5":[],"list_6":[],"list_7":[],"list_8":[],"list_9":[],"list_10":[],"list_11":[],"map_1":{},"map_2":{},"map_3":{},"map_4":{},"map_5":{},"map_6":{},"map_7":{},"map_8":{},"map_9":{},"map_10":{},"map_11":{}}]}
//⑧ {"list_9":[[]]} -> {"list_9":[null]}
//验证是否通过: ❌ 第1、2、3、4、5、6、8 结果不对
}
fun sample_10_list_by_bean() {
println("Bean类-数组集合-泛型容错<数组集合>")
faultRange.forEachIndexed { index, it ->
val json = "{\"list_10\":[${it}]}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("list_10" to bean.list_10)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"list_10":[null]} -> {"list_10":[null]}
//② {"list_10":[""]} -> {"list_10":[null]}
//③ {"list_10":["字符串"]} -> {"list_10":[null]}
//④ {"list_10":[false]} -> {"list_10":[null]}
//⑤ {"list_10":[0]} -> {"list_10":[null]}
//⑥ {"list_10":[0.0]} -> {"list_10":[null]}
//⑦ {"list_10":[{}]} -> {"list_10":[null]}
//⑧ {"list_10":[[]]} -> {"list_10":[[]]}
//验证是否通过: ❌ 第1、2、3、4、5、6、7 结果不对
}
fun sample_11_list_by_bean() {
println("Bean类-数组集合-泛型容错<Map集合>")
faultRange.forEachIndexed { index, it ->
val json = "{\"list_11\":[${it}]}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("list_11" to bean.list_11)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"list_11":[null]} -> {"list_11":[null]}
//② {"list_11":[""]} -> {"list_11":[{}]}
//③ {"list_11":["字符串"]} -> {"list_11":[{}]}
//④ {"list_11":[false]} -> {"list_11":[{}]}
//⑤ {"list_11":[0]} -> {"list_11":[{}]}
//⑥ {"list_11":[0.0]} -> {"list_11":[{}]}
//⑦ {"list_11":[{}]} -> {"list_11":[{}]}
//⑧ {"list_11":[[]]} -> {"list_11":[{}]}
//验证是否通过: ❌ 第1 结果不对
}
fun sample_1_map_by_bean() {
println("Bean类-Map集合-外层容错")
faultRange.forEachIndexed { index, it ->
val json = "{\"map_1\":${it}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("map_1" to bean.map_1)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"map_1":null} -> {"map_1":{}}
//② {"map_1":""} -> {"map_1":{}}
//③ {"map_1":"字符串"} -> {"map_1":{}}
//④ {"map_1":false} -> {"map_1":{}}
//⑤ {"map_1":0} -> {"map_1":{}}
//⑥ {"map_1":0.0} -> {"map_1":{}}
//⑦ {"map_1":{}} -> {"map_1":{}}
//⑧ {"map_1":[]} -> {"map_1":{}}
//验证是否通过: ✅
}
fun sample_2_map_by_bean() {
println("Bean类-Map集合-泛型容错<String,String>")
faultRange.forEachIndexed { index, it ->
val json = "{\"map_2\":{${it}}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("map_2" to bean.map_2)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"map_11":{null}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 17 path $.map_11.
//② {"map_11":{""}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 15 path $.map_11.
//③ {"map_11":{"字符串"}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//④ {"map_11":{false}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//⑤ {"map_11":{0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 14 path $.map_11.
//⑥ {"map_11":{0.0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 16 path $.map_11.
//⑦ {"map_11":{{}}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//⑧ {"map_11":{[]}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_3_map_by_bean() {
println("Bean类-Map集合-泛型容错<String,Boolean>")
faultRange.forEachIndexed { index, it ->
val json = "{\"map_3\":{${it}}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("map_3" to bean.map_3)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"map_11":{null}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 17 path $.map_11.
//② {"map_11":{""}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 15 path $.map_11.
//③ {"map_11":{"字符串"}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//④ {"map_11":{false}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//⑤ {"map_11":{0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 14 path $.map_11.
//⑥ {"map_11":{0.0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 16 path $.map_11.
//⑦ {"map_11":{{}}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//⑧ {"map_11":{[]}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_4_map_by_bean() {
println("Bean类-Map集合-泛型容错<String,Int>")
faultRange.forEachIndexed { index, it ->
val json = "{\"map_4\":{${it}}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("map_4" to bean.map_4)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"map_11":{null}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 17 path $.map_11.
//② {"map_11":{""}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 15 path $.map_11.
//③ {"map_11":{"字符串"}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//④ {"map_11":{false}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//⑤ {"map_11":{0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 14 path $.map_11.
//⑥ {"map_11":{0.0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 16 path $.map_11.
//⑦ {"map_11":{{}}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//⑧ {"map_11":{[]}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_5_map_by_bean() {
println("Bean类-Map集合-泛型容错<String,Long>")
faultRange.forEachIndexed { index, it ->
val json = "{\"map_5\":{${it}}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("map_5" to bean.map_5)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"map_11":{null}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 17 path $.map_11.
//② {"map_11":{""}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 15 path $.map_11.
//③ {"map_11":{"字符串"}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//④ {"map_11":{false}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//⑤ {"map_11":{0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 14 path $.map_11.
//⑥ {"map_11":{0.0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 16 path $.map_11.
//⑦ {"map_11":{{}}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//⑧ {"map_11":{[]}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_6_map_by_bean() {
println("Bean类-Map集合-泛型容错<String,Float>")
faultRange.forEachIndexed { index, it ->
val json = "{\"map_6\":{${it}}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("map_6" to bean.map_6)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"map_11":{null}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 17 path $.map_11.
//② {"map_11":{""}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 15 path $.map_11.
//③ {"map_11":{"字符串"}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//④ {"map_11":{false}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//⑤ {"map_11":{0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 14 path $.map_11.
//⑥ {"map_11":{0.0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 16 path $.map_11.
//⑦ {"map_11":{{}}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//⑧ {"map_11":{[]}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_7_map_by_bean() {
println("Bean类-Map集合-泛型容错<String,Double>")
faultRange.forEachIndexed { index, it ->
val json = "{\"map_7\":{${it}}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("map_7" to bean.map_7)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"map_11":{null}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 17 path $.map_11.
//② {"map_11":{""}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 15 path $.map_11.
//③ {"map_11":{"字符串"}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//④ {"map_11":{false}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//⑤ {"map_11":{0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 14 path $.map_11.
//⑥ {"map_11":{0.0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 16 path $.map_11.
//⑦ {"map_11":{{}}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//⑧ {"map_11":{[]}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_8_map_by_bean() {
println("Bean类-Map集合-泛型容错<String,BigDecimal>")
faultRange.forEachIndexed { index, it ->
val json = "{\"map_8\":{${it}}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("map_8" to bean.map_8)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"map_11":{null}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 17 path $.map_11.
//② {"map_11":{""}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 15 path $.map_11.
//③ {"map_11":{"字符串"}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//④ {"map_11":{false}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//⑤ {"map_11":{0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 14 path $.map_11.
//⑥ {"map_11":{0.0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 16 path $.map_11.
//⑦ {"map_11":{{}}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//⑧ {"map_11":{[]}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_9_map_by_bean() {
println("Bean类-Map集合-泛型容错<String,Bean对象>")
faultRange.forEachIndexed { index, it ->
val json = "{\"map_9\":{${it}}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("map_9" to bean.map_9)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"map_11":{null}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 17 path $.map_11.
//② {"map_11":{""}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 15 path $.map_11.
//③ {"map_11":{"字符串"}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//④ {"map_11":{false}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//⑤ {"map_11":{0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 14 path $.map_11.
//⑥ {"map_11":{0.0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 16 path $.map_11.
//⑦ {"map_11":{{}}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//⑧ {"map_11":{[]}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_10_map_by_bean() {
println("Bean类-Map集合-泛型容错<String,数组集合>")
faultRange.forEachIndexed { index, it ->
val json = "{\"map_10\":{${it}}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("map_10" to bean.map_10)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"map_11":{null}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 17 path $.map_11.
//② {"map_11":{""}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 15 path $.map_11.
//③ {"map_11":{"字符串"}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//④ {"map_11":{false}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 18 path $.map_11.
//⑤ {"map_11":{0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 14 path $.map_11.
//⑥ {"map_11":{0.0}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 16 path $.map_11.
//⑦ {"map_11":{{}}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//⑧ {"map_11":{[]}} -> com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 12 path $.map_11.
//验证是否通过: ❌ 第1、2、3、4、5、6、7、8 结果不对
}
fun sample_11_map_by_bean() {
println("Bean类-Map集合-泛型容错<String,Map集合>")
faultRange.forEachIndexed { index, it ->
val json = "{\"map_11\":{${it}}}"
try {
val bean = GsonFactory.getSingletonGson().fromJson(json, TestBean::class.java)
print("${number(index)} ${json} -> ")
println(GsonFactory.getSingletonGson().toJson(mapOf("map_11" to bean.map_11)))
} catch (e: Exception) {
print("${number(index)} ${json} -> ")
println(e)
}
}
println("--------------------------------------------")
//打印结果
//① {"list_2":[null]} -> {"list_2":[null]}
//② {"list_2":[""]} -> {"list_2":[""]}
//③ {"list_2":["字符串"]} -> {"list_2":["字符串"]}
//④ {"list_2":[false]} -> {"list_2":["false"]}
//⑤ {"list_2":[0]} -> {"list_2":["0"]}
//⑥ {"list_2":[0.0]} -> {"list_2":["0.0"]}
//⑦ {"list_2":[{}]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_2[1]
//⑧ {"list_2":[[]]} -> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected END_OBJECT but was END_ARRAY at line 1 column 15 path $.list_2[1]
//验证是否通过: ❌ 第1、7、8结果不对
}
fun number(index: Int): String {
return when (index) {
0 -> "①"
1 -> "②"
2 -> "③"
3 -> "④"
4 -> "⑤"
5 -> "⑥"
6 -> "⑦"
7 -> "⑧"
else -> ""
}
}
我居然看完了。。。
我这个觉得吧, 容错这种类试的问题,只能因项目而异,不难100%解决。
不嫌麻烦就用最原始的方式解析吧~
实事求事,不喜勿喷。
只是提出建议,没有必要优化, 合不合理, 我都没有决定权, 有些点一个人可能想不全需要补断完善的。 即使不用容错库, 也一样开发, 无非就是多点报错提示。
@zzl313703419 小伙子,Map 集合类型对不上导致解析失败的问题已经修复了,你下载上面这个包试试看问题还有没有出现?
测试了下最新版aar, map和list集合解析报错都好了, 不过还存在部分null,[null]情况 同时我也简化了下流程 Test.kt.zip 应该是这一块代码导致(CollectionTypeAdapter,ReflectiveTypeAdapter)
MapTypeAdapter
数组集合-外层容错
① null -> null
② "" -> null
③ "字符串" -> null
④ false -> null
⑤ 0 -> null
⑥ 0.0 -> null
⑦ {} -> null
⑧ [] -> []
--------------------------------------------
数组集合-泛型容错<String>
① [null] -> [null]
② [""] -> [""]
③ ["字符串"] -> ["字符串"]
④ [false] -> ["false"]
⑤ [0] -> ["0"]
⑥ [0.0] -> ["0.0"]
⑦ [{}] -> []
⑧ [[]] -> []
--------------------------------------------
数组集合-泛型容错<Boolean>
① [null] -> [null]
② [""] -> []
③ ["字符串"] -> []
④ [false] -> [false]
⑤ [0] -> [false]
⑥ [0.0] -> [false]
⑦ [{}] -> []
⑧ [[]] -> []
--------------------------------------------
数组集合-泛型容错<Int>
① [null] -> [null]
② [""] -> [0]
③ ["字符串"] -> []
④ [false] -> []
⑤ [0] -> [0]
⑥ [0.0] -> [0]
⑦ [{}] -> []
⑧ [[]] -> []
--------------------------------------------
数组集合-泛型容错<Long>
① [null] -> [null]
② [""] -> [0]
③ ["字符串"] -> []
④ [false] -> []
⑤ [0] -> [0]
⑥ [0.0] -> [0]
⑦ [{}] -> []
⑧ [[]] -> []
--------------------------------------------
数组集合-泛型容错<Float>
① [null] -> [null]
② [""] -> [0.0]
③ ["字符串"] -> []
④ [false] -> []
⑤ [0] -> [0.0]
⑥ [0.0] -> [0.0]
⑦ [{}] -> []
⑧ [[]] -> []
--------------------------------------------
数组集合-泛型容错<Double>
① [null] -> [null]
② [""] -> [0.0]
③ ["字符串"] -> []
④ [false] -> []
⑤ [0] -> [0.0]
⑥ [0.0] -> [0.0]
⑦ [{}] -> []
⑧ [[]] -> []
--------------------------------------------
数组集合-泛型容错<BigDecimal>
① [null] -> [null]
② [""] -> [0]
③ ["字符串"] -> []
④ [false] -> []
⑤ [0] -> [0]
⑥ [0.0] -> [0.0]
⑦ [{}] -> []
⑧ [[]] -> []
--------------------------------------------
数组集合-泛型容错<Bean对象>
① [null] -> [null]
② [""] -> [null]
③ ["字符串"] -> [null]
④ [false] -> [null]
⑤ [0] -> [null]
⑥ [0.0] -> [null]
⑦ [{}] -> [{"base_1":"","base_2":false,"base_3":0,"base_4":0,"base_5":0.0,"base_6":0.0,"base_7":0}]
⑧ [[]] -> [null]
--------------------------------------------
数组集合-泛型容错<数组集合>
① [null] -> [null]
② [""] -> [null]
③ ["字符串"] -> [null]
④ [false] -> [null]
⑤ [0] -> [null]
⑥ [0.0] -> [null]
⑦ [{}] -> [null]
⑧ [[]] -> [[]]
--------------------------------------------
数组集合-泛型容错<Map集合>
① [null] -> [null]
② [""] -> [{}]
③ ["字符串"] -> [{}]
④ [false] -> [{}]
⑤ [0] -> [{}]
⑥ [0.0] -> [{}]
⑦ [{}] -> [{}]
⑧ [[]] -> [{}]
--------------------------------------------
Map集合-外层容错
① null -> null
② "" -> {}
③ "字符串" -> {}
④ false -> {}
⑤ 0 -> {}
⑥ 0.0 -> {}
⑦ {} -> {}
⑧ [] -> {}
--------------------------------------------
Map集合-泛型容错<String,String>
① {"demo":null} -> {}
② {"demo":""} -> {"demo":""}
③ {"demo":"字符串"} -> {"demo":"字符串"}
④ {"demo":false} -> {"demo":"false"}
⑤ {"demo":0} -> {"demo":"0"}
⑥ {"demo":0.0} -> {"demo":"0.0"}
⑦ {"demo":{}} -> {}
⑧ {"demo":[]} -> {}
--------------------------------------------
Map集合-泛型容错<String,Boolean>
① {"demo":null} -> {}
② {"demo":""} -> {}
③ {"demo":"字符串"} -> {}
④ {"demo":false} -> {"demo":false}
⑤ {"demo":0} -> {"demo":false}
⑥ {"demo":0.0} -> {"demo":false}
⑦ {"demo":{}} -> {}
⑧ {"demo":[]} -> {}
--------------------------------------------
Map集合-泛型容错<String,Int>
① {"demo":null} -> {}
② {"demo":""} -> {"demo":0}
③ {"demo":"字符串"} -> {}
④ {"demo":false} -> {}
⑤ {"demo":0} -> {"demo":0}
⑥ {"demo":0.0} -> {"demo":0}
⑦ {"demo":{}} -> {}
⑧ {"demo":[]} -> {}
--------------------------------------------
Map集合-泛型容错<String,Long>
① {"demo":null} -> {}
② {"demo":""} -> {"demo":0}
③ {"demo":"字符串"} -> {}
④ {"demo":false} -> {}
⑤ {"demo":0} -> {"demo":0}
⑥ {"demo":0.0} -> {"demo":0}
⑦ {"demo":{}} -> {}
⑧ {"demo":[]} -> {}
--------------------------------------------
Map集合-泛型容错<String,Float>
① {"demo":null} -> {}
② {"demo":""} -> {"demo":0.0}
③ {"demo":"字符串"} -> {}
④ {"demo":false} -> {}
⑤ {"demo":0} -> {"demo":0.0}
⑥ {"demo":0.0} -> {"demo":0.0}
⑦ {"demo":{}} -> {}
⑧ {"demo":[]} -> {}
--------------------------------------------
Map集合-泛型容错<String,Double>
① {"demo":null} -> {}
② {"demo":""} -> {"demo":0.0}
③ {"demo":"字符串"} -> {}
④ {"demo":false} -> {}
⑤ {"demo":0} -> {"demo":0.0}
⑥ {"demo":0.0} -> {"demo":0.0}
⑦ {"demo":{}} -> {}
⑧ {"demo":[]} -> {}
--------------------------------------------
Map集合-泛型容错<String,BigDecimal>
① {"demo":null} -> {}
② {"demo":""} -> {"demo":0}
③ {"demo":"字符串"} -> {}
④ {"demo":false} -> {}
⑤ {"demo":0} -> {"demo":0}
⑥ {"demo":0.0} -> {"demo":0.0}
⑦ {"demo":{}} -> {}
⑧ {"demo":[]} -> {}
--------------------------------------------
Map集合-泛型容错<String,Bean对象>
① {"demo":null} -> {}
② {"demo":""} -> {}
③ {"demo":"字符串"} -> {}
④ {"demo":false} -> {}
⑤ {"demo":0} -> {}
⑥ {"demo":0.0} -> {}
⑦ {"demo":{}} -> {"demo":{"base_1":"","base_2":false,"base_3":0,"base_4":0,"base_5":0.0,"base_6":0.0,"base_7":0}}
⑧ {"demo":[]} -> {}
--------------------------------------------
Map集合-泛型容错<String,数组集合>
① {"demo":null} -> {}
② {"demo":""} -> {}
③ {"demo":"字符串"} -> {}
④ {"demo":false} -> {}
⑤ {"demo":0} -> {}
⑥ {"demo":0.0} -> {}
⑦ {"demo":{}} -> {}
⑧ {"demo":[]} -> {"demo":[]}
--------------------------------------------
Map集合-泛型容错<String,Map集合>
① {"demo":null} -> {}
② {"demo":""} -> {"demo":{}}
③ {"demo":"字符串"} -> {"demo":{}}
④ {"demo":false} -> {"demo":{}}
⑤ {"demo":0} -> {"demo":{}}
⑥ {"demo":0.0} -> {"demo":{}}
⑦ {"demo":{}} -> {"demo":{}}
⑧ {"demo":[]} -> {"demo":{}}
--------------------------------------------
Bean类
① null -> null
② "" -> null
③ "字符串" -> null
④ false -> null
⑤ 0 -> null
⑥ 0.0 -> null
⑦ {} -> {"base_1":"","base_2":false,"base_3":0,"base_4":0,"base_5":0.0,"base_6":0.0,"base_7":0}
⑧ [] -> null
--------------------------------------------
Bean类-基本类型(String)
① {"base_1":null} -> {"base_1":""}
② {"base_1":""} -> {"base_1":""}
③ {"base_1":"字符串"} -> {"base_1":"字符串"}
④ {"base_1":false} -> {"base_1":"false"}
⑤ {"base_1":0} -> {"base_1":"0"}
⑥ {"base_1":0.0} -> {"base_1":"0.0"}
⑦ {"base_1":{}} -> {"base_1":""}
⑧ {"base_1":[]} -> {"base_1":""}
--------------------------------------------
Bean类-基本类型(Boolean)
① {"base_2":null} -> {"base_2":false}
② {"base_2":""} -> {"base_2":false}
③ {"base_2":"字符串"} -> {"base_2":false}
④ {"base_2":false} -> {"base_2":false}
⑤ {"base_2":0} -> {"base_2":false}
⑥ {"base_2":0.0} -> {"base_2":false}
⑦ {"base_2":{}} -> {"base_2":false}
⑧ {"base_2":[]} -> {"base_2":false}
--------------------------------------------
Bean类-基本类型(Int)
① {"base_3":null} -> {"base_3":0}
② {"base_3":""} -> {"base_3":0}
③ {"base_3":"字符串"} -> {"base_3":0}
④ {"base_3":false} -> {"base_3":0}
⑤ {"base_3":0} -> {"base_3":0}
⑥ {"base_3":0.0} -> {"base_3":0}
⑦ {"base_3":{}} -> {"base_3":0}
⑧ {"base_3":[]} -> {"base_3":0}
--------------------------------------------
Bean类-基本类型(Long)
① {"base_4":null} -> {"base_4":0}
② {"base_4":""} -> {"base_4":0}
③ {"base_4":"字符串"} -> {"base_4":0}
④ {"base_4":false} -> {"base_4":0}
⑤ {"base_4":0} -> {"base_4":0}
⑥ {"base_4":0.0} -> {"base_4":0}
⑦ {"base_4":{}} -> {"base_4":0}
⑧ {"base_4":[]} -> {"base_4":0}
--------------------------------------------
Bean类-基本类型(Float)
① {"base_5":null} -> {"base_5":0.0}
② {"base_5":""} -> {"base_5":0.0}
③ {"base_5":"字符串"} -> {"base_5":0.0}
④ {"base_5":false} -> {"base_5":0.0}
⑤ {"base_5":0} -> {"base_5":0.0}
⑥ {"base_5":0.0} -> {"base_5":0.0}
⑦ {"base_5":{}} -> {"base_5":0.0}
⑧ {"base_5":[]} -> {"base_5":0.0}
--------------------------------------------
Bean类-基本类型(Double)
① {"base_6":null} -> {"base_6":0.0}
② {"base_6":""} -> {"base_6":0.0}
③ {"base_6":"字符串"} -> {"base_6":0.0}
④ {"base_6":false} -> {"base_6":0.0}
⑤ {"base_6":0} -> {"base_6":0.0}
⑥ {"base_6":0.0} -> {"base_6":0.0}
⑦ {"base_6":{}} -> {"base_6":0.0}
⑧ {"base_6":[]} -> {"base_6":0.0}
--------------------------------------------
Bean类-基本类型(BigDecimal)
① {"base_7":null} -> {"base_7":0}
② {"base_7":""} -> {"base_7":0}
③ {"base_7":"字符串"} -> {"base_7":0}
④ {"base_7":false} -> {"base_7":0}
⑤ {"base_7":0} -> {"base_7":0}
⑥ {"base_7":0.0} -> {"base_7":0.0}
⑦ {"base_7":{}} -> {"base_7":0}
⑧ {"base_7":[]} -> {"base_7":0}
--------------------------------------------
@zzl313703419 小伙子,我斟酌了许久,最终采纳这个建议,将后台返回 null 和返回错误数据的情况,返回一个不为空但是集合大小为 0 的 List 和 Map 对象,目前改动的代码提交,并且远程依赖已经更新,更新一下到框架 9.0 版本 即可。
好的 辛苦了 更新至9.0版本 测下来 null减少了部分 还剩下一点 有劳再看下 1.ReflectiveTypeAdapter
2.data包下所有的TypeAdapter
@zzl313703419 小伙子,很抱歉,我现在才看到这个回复,对于你提的两个问题,我分别做一下回答:
另外基本数据类型对象返回非空的问题,我认为不能这样做,要根据不同情况分析:
Java:在 Java 语言中,有 Float 和 float 类型,float 是基本数据类型,默认值为 0,而 Float 是对象,默认值为 null,如果按照你的想法来,那么他们两个的结果是一样的,都会是零,如果别人想要非空的值,那么就会使用 float 类型,而不是 Float 类型,如果人家使用了 Float 类型,那么证明别人很可能需要知道后台是否有返回 Float 类型的数值,或者返回的是否为空。
Kotlin:在 Kotlin 语言中,只有 Float 类型,但是直接返回 0,可能是比较好的做法,因为框架里面有一段代码逻辑,在给 Bean 赋值的时候,如果此时后台返回的值为空,那么就不会给字段赋值,这样字段就会使用它的默认值,你可以通过给字段赋值达到不为空的目的。
其实我想表达的是在泛型下,因为不能指定泛型的默认值,在调用时还是会出现null情况的 举个例子(map集合同理) val list: ArrayList< String > = arrayListOf() 如果这时候服务器返回的是{list:[null,null,null,"字符"]} 解析出来还是[null,null,null,"字符"],在调用时就会遇到空指针问题了,针对这种泛型没有默认值的基础类型
这种情况,因为没有统一答案,可以返回下面4种情况 1.不对null最任何处理->[null,null,null,"字符"] 1.过滤掉null -> ["字符"] 2.null变成默认值""(这里根据定义的基础类型会变化) -> ["","","","字符"] 3.列表中只要有一个null,该数组长度就为0 -> []
这就涉及到我想在后面提的第二处优化了,涉及到用户想要哪种泛型方案了,比如有个全局配置之类 ,或者对单次解析也能单独生效。对于泛型的默认值提供配置之类。
其实我想表达的是在泛型下,因为不能指定泛型的默认值,在调用时还是会出现null情况的 举个例子(map集合同理) val list: ArrayList< String > = arrayListOf() 如果这时候服务器返回的是{list:[null,null,null,"字符"]} 解析出来还是[null,null,null,"字符"],在调用时就会遇到空指针问题了,针对这种泛型没有默认值的基础类型
这种情况,因为没有统一答案,可以返回下面4种情况 1.不对null最任何处理->[null,null,null,"字符"] 1.过滤掉null -> ["字符"] 2.null变成默认值""(这里根据定义的基础类型会变化) -> ["","","","字符"] 3.列表中只要有一个null,该数组长度就为0 -> []
这就涉及到我想在后面提的第二处优化了,涉及到用户想要哪种泛型方案了,比如有个全局配置之类 ,或者对单次解析也能单独生效。对于泛型的默认值提供配置之类。
小伙子,这个想法大概率不会被采纳,因为违背了一些基本的原则
针对这种场景,建议你自定义 List 类型,可以继承 ArrayList,重写 add 方法,如果不为空则不去调用 super.add 方法
问题1、后台返回 null 的条目,这种不是数据容错了,而是故意而为之 答: 后台返回null的条目有些情况并不是故意为之的,而是后台自身问题在本不应该返null的时候还是返回了null, 我前段时间的真实例子: 报表有个趋势折线图Y轴应该返回float数组的,结果后台返了[null,null,8.5,3.2]这样的数据 ,对于接收方而言是不想要null的, 和例子{ "age" : null }本质上是一样的 ,都是后台导致的问题
问题2、强行把 null 剔除掉, 自定义 List 类型,可以继承 ArrayList,重写 add 方法,如果不为空则不去调用 super.add 方法 答: 实践可以通过自定义控制是否要保留null, 但当null时,自己不能控制设置成add("")或者add(0)这样的,还是回到了问题1,问下这个应该怎么优化
class TempArraylist<T> : ArrayList<T>() {
override fun add(element: T): Boolean {
if (element != null) {
super.add(element)
}
return true
}
}
小伙子,自己不能控制设置成add("")或者add(0)这样的,还是回到了问题1,问下这个应该怎么优化
,我听不太懂你这句话的意思
就是如果服务器返回的[null,null,8.5,3.2] , 我想容错成[0.0,0.0,8.5,3.2], 目前框架返回的是[null,null,8.5,3.2], 调用会空指针 本来的优化想法是
就是如果服务器返回的[null,null,8.5,3.2] , 我想容错成[0.0,0.0,8.5,3.2], 目前框架返回的是[null,null,8.5,3.2], 调用会空指针 本来的优化想法是
你可能需要这样:
class TempArrayList<T>:ArrayList<T?>(){
override fun add(element: T?): Boolean {
return when{
element is String && element.isNullOrEmpty() -> add("" as T)
element is Float && element == null -> add(0.0 as T)
else -> super.add(element)
}
}
}
就是如果服务器返回的[null,null,8.5,3.2] , 我想容错成[0.0,0.0,8.5,3.2], 目前框架返回的是[null,null,8.5,3.2], 调用会空指针 本来的优化想法是
你可能需要这样:
class TempArrayList<T>:ArrayList<T?>(){ override fun add(element: T?): Boolean { return when{ element is String && element.isNullOrEmpty() -> add("" as T) element is Float && element == null -> add(0.0 as T) else -> super.add(element) } } }
可以 感谢~
历时两个月 辛苦了 多谢解答
你觉得框架有什么不足之处?【必答】
建议容错库遇到类型匹配但解析错误的时候,也可以返回默认值 例子复现如下:
执行以上代码 会直接抛出错误. 在真实场景中请求一个接口返回一段json解析,如果因为解析其中一个字段就整体抛错的话,也会让程序停止进行不下去,这一点是否可以优化
issue 是否有人曾提过类似的建议?【必答】
否
框架文档是否提及了该问题【必答】
否
是否已经查阅框架文档但还未能解决的【必答】
是
你觉得该怎么去完善会比较好?【非必答】
No response