后端给了一个这种格式的 Json 数据:
{ "obj":"[ { \"Name\":\"小明\" }, { \"Name\":\"小白\" }, { \"Name\":\"小黑\" } ]" }
简单来说就是:一个字段的内容为转义后的json,这时无法使用 Gson 直接转换为对象,因为 Gson 无法识别那串转义后的 json。(PS:全部带转义字符的是可以直接解析的)
解决方案:
val parseString = JsonParser.parseString(obj) val obj = if (parseString.isJsonPrimitive) { parseString.asJsonPrimitive.asString } else { obj } Gson().fromJson(obj, object : TypeToken<List<Obj>>() {}.type)
先用 JsonParser 解析为 JsonElement,再使用 isJsonPrimitive 判断,至于这个判断根据官方的解释只是用来判断是否为原始数据类型,然后强转为相关类型。
但是通过查看源码可以得知:实际上和直接获取并无不同。
于是后来证明直接解析也可以,打断点也没能走进 asJsonPrimitive 逻辑,可是之前明明是失败的,再仔细看了一眼逻辑,多了一行 :
val parseString = JsonParser.parseString(obj)
核心就在这里了,转义的字符已经被去除了,于是也就可以解析成功了,以上!
本站由以下主机服务商提供服务支持:
0条评论