Gradle配置
dependencies {
// https://github.com/alibaba/fastjson/issues/2054
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
compile "com.alibaba:fastjson:1.2.73"
}
使用方式
class Bean {
/**
* 处理关键字解析问题
*/
@JSONField(name = "public")
var publicX: String? = null
@JSONField(name = "package")
var packageX: String? = null
}
object Test {
@JvmStatic
fun main(args: Array<String>) {
val json = "{\n" +
" \"public\":\"123public123\",\n" +
" \"package\":\"456package456\"\n" +
"}"
val bean = JSON.parseObject(json, Bean::class.java)
println(bean.packageX) // 123public123
println(bean.publicX) // 456package456
println(JSON.toJSON(bean)) // {"package":"456package456","public":"123public123"}
}
}
Retrofit - addConverterFactory
import com.alibaba.fastjson.support.retrofit.Retrofit2ConverterFactory;
...
Retrofit retrofit = new Retrofit.Builder()
...
.addConverterFactory(Retrofit2ConverterFactory.create()) // 添加Json转换器
...
.build();
容错测试:
// api
{
"data" : [{
"age" : "10",
"sex" : "1"
}]
}
// result
{
data: {
age: "10",
sex: "1"
}
}
class Bean {
var data: List<Temp>? = null
class Temp {
var age: Int? = null
var sex: Int? = null
}
}
class Bean2 {
var data: Temp? = null
class Temp {
var age: Int? = null
var sex: Int? = null
}
}
对于 Bean 类来说,使用 api json 数据和使用 result json 数据解析的结果是一样的,不会出错
对于 Bean2 类来说,只有使用 result json 数据才能正清解析数据
结论:Fastjson对于原本按照数组创建的 Bean 类,当 json 数据是单个对象时,进行了容错处理