Gradle配置

  1. dependencies {
  2. // https://github.com/alibaba/fastjson/issues/2054
  3. compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
  4. compile "com.alibaba:fastjson:1.2.73"
  5. }

使用方式

  1. class Bean {
  2. /**
  3. * 处理关键字解析问题
  4. */
  5. @JSONField(name = "public")
  6. var publicX: String? = null
  7. @JSONField(name = "package")
  8. var packageX: String? = null
  9. }
  10. object Test {
  11. @JvmStatic
  12. fun main(args: Array<String>) {
  13. val json = "{\n" +
  14. " \"public\":\"123public123\",\n" +
  15. " \"package\":\"456package456\"\n" +
  16. "}"
  17. val bean = JSON.parseObject(json, Bean::class.java)
  18. println(bean.packageX) // 123public123
  19. println(bean.publicX) // 456package456
  20. println(JSON.toJSON(bean)) // {"package":"456package456","public":"123public123"}
  21. }
  22. }

Retrofit - addConverterFactory

  1. import com.alibaba.fastjson.support.retrofit.Retrofit2ConverterFactory;
  2. ...
  3. Retrofit retrofit = new Retrofit.Builder()
  4. ...
  5. .addConverterFactory(Retrofit2ConverterFactory.create()) // 添加Json转换器
  6. ...
  7. .build();

容错测试:

  1. // api
  2. {
  3. "data" : [{
  4. "age" : "10",
  5. "sex" : "1"
  6. }]
  7. }
  8. // result
  9. {
  10. data: {
  11. age: "10",
  12. sex: "1"
  13. }
  14. }
  1. class Bean {
  2. var data: List<Temp>? = null
  3. class Temp {
  4. var age: Int? = null
  5. var sex: Int? = null
  6. }
  7. }
  8. class Bean2 {
  9. var data: Temp? = null
  10. class Temp {
  11. var age: Int? = null
  12. var sex: Int? = null
  13. }
  14. }

对于 Bean 类来说,使用 api json 数据和使用 result json 数据解析的结果是一样的,不会出错
对于 Bean2 类来说,只有使用 result json 数据才能正清解析数据
结论:Fastjson对于原本按照数组创建的 Bean 类,当 json 数据是单个对象时,进行了容错处理