Kotlin类将JSON与GSON builder的嵌套对象匹配
我有一些传入的JSON,看起来像这样Kotlin类将JSON与GSON builder的嵌套对象匹配,json,kotlin,gson,Json,Kotlin,Gson,我有一些传入的JSON,看起来像这样 { "status":200, "transformation_percent":0.0, "image_percent":24.51, "bandwidth_percent":0.0, "storage_percent":26.23, "freeTrialPeriod":7889238000, "freeTrialParams":"{\"cache_period\":604800000,\"cache_a
{ "status":200,
"transformation_percent":0.0,
"image_percent":24.51,
"bandwidth_percent":0.0,
"storage_percent":26.23,
"freeTrialPeriod":7889238000,
"freeTrialParams":"{\"cache_period\":604800000,\"cache_allowance\":5000,\"price_in_cents\":0}",
"basicPlanParams":"{\"cache_period\":604800000,\"cache_allowance\":10000,\"stripe_plan_id\":\"plan_blah\",\"price_in_cents\":100,\"currency\":\"eur\"}"
}
我正在尝试构造一个ServerParams Kotlin类,该类将与传入的JSON相匹配,这样我就可以像这样将该类传递给gsonBuilder:
val GSON = GsonBuilder().setLenient().create()
val server_params = GSON.fromJson(string, ServerParams::class.java)
我正在努力处理嵌套对象。我知道如何编写自己的反序列化程序,因此如果有必要,我可以这样做,但在我短暂的经验中,Kotlin已被证明是一种非常优雅的语言,因此我认为一定有更好的方法。我也不想为每个API调用编写匹配的反序列化程序
我尝试过内部类,但没有成功。我尝试过为JSON字符串中的嵌套对象创建其他类,但也没有成功。下面是一个简单的示例:
class OuterClass(val name: String) {
var inner = InnerClass(2)
}
class InnerClass(val number: Int)
fun main() {
val gson = GsonBuilder().setLenient().create()
val outerClass = gson.fromJson("""{
name: 'test',
inner: {
number : 1
}
}""".trimMargin(), OuterClass::class.java)
}
您只需将内部类的实例放在外部类的属性中
由于Gson通过反射对类进行变异,您还可以将内部类声明为lateninit
,这将使内部类的实例化不需要默认值
class OuterClass(val name: String) {
lateinit var inner: InnerClass
}
当然,这只有在您仅通过Gson恢复课程时才有意义。谢谢。通过你的例子真的帮助了我。对嵌套对象进行两次解析,将其转换为字符串,这是一个问题。我说的对吗?外部类中属性的名称必须与JSON中对象的名称匹配,这一点非常重要?@Tom很高兴它能帮助您!如果您的意思是
internal:{…
,对象的名称用JSON表示,那么这是正确的。因为JSON中没有定义顺序,所以名称对于大型映射至关重要。