在Kotlin中使用动态字段解析json对象

在Kotlin中使用动态字段解析json对象,json,spring-boot,kotlin,Json,Spring Boot,Kotlin,我有一个JSON对象: { "mobileNum": "05x-xxxxxxx", "appId": "some_app", "messageId": "printUsersFirstTime", "shouldSendDate": "2017-10-03T16:20+03:00", // this is optional "paramMap": { "userName": "some_name" }, "filters": { "UNIQUE": f

我有一个JSON对象:

{
  "mobileNum": "05x-xxxxxxx", 
   "appId": "some_app", 
   "messageId": "printUsersFirstTime", 
   "shouldSendDate": "2017-10-03T16:20+03:00", // this is optional 
   "paramMap": { "userName": "some_name" }, 
   "filters": { "UNIQUE": false, "RECENT": "{ \"unit\": \"MINUTE\", \"size\": 5 }"
}
我使用弹簧靴和Kotlin。Spring boot会自动将提到的JSON映射到以下模型bean:

data class SmsDto(
    var mobileNum: String? = null,
    val appId: String? = null,
    val messageId: String? = null,
    var paramMap: Map<String, String>? = null,
    var shouldSendDate: Timestamp? = null,
    var filters: Map<String, String>? = defaultFilters
)
数据类SmsDto(
var mobileNum:字符串?=null,
val appId:字符串?=null,
val messageId:String?=null,
var paramMap:Map?=null,
var shouldSendDate:时间戳?=null,
变量过滤器:映射?=defaultFilters
)
如您所见,我遇到的问题是
过滤器
字段,它是一个
字符串
,但可能包含另一个JSON对象。因此,我使用了一种懒惰的解决方案,即转义内部JSON双引号,然后自己解析它


有没有更标准的解决方案可以让我发送一个合适的内部JSON对象?

Spring Boot似乎正在使用Jackson库处理您的数据类和JSON格式。您可以使用另一个数据类作为
过滤器
字段的类型

data class SmsDto(
    var mobileNum: String? = null,
    val appId: String? = null,
    val messageId: String? = null,
    var paramMap: Map<String, String>? = null,
    var shouldSendDate: Timestamp? = null,
    var filters: SmsFiltersDto? = defaultFilters
)

data class SmsFiltersDto(
    var yourField: Boolean = false,
    ...
)
数据类SmsDto(
var mobileNum:字符串?=null,
val appId:字符串?=null,
val messageId:String?=null,
var paramMap:Map?=null,
var shouldSendDate:时间戳?=null,
变量过滤器:SmsFiltersDto?=默认过滤器
)
数据类SmsFiltersDto(
变量yourField:Boolean=false,
...
)

Spring Boot似乎正在使用Jackson库处理您的数据类和json格式。您可以使用另一个数据类作为
过滤器
字段的类型

data class SmsDto(
    var mobileNum: String? = null,
    val appId: String? = null,
    val messageId: String? = null,
    var paramMap: Map<String, String>? = null,
    var shouldSendDate: Timestamp? = null,
    var filters: SmsFiltersDto? = defaultFilters
)

data class SmsFiltersDto(
    var yourField: Boolean = false,
    ...
)
数据类SmsDto(
var mobileNum:字符串?=null,
val appId:字符串?=null,
val messageId:String?=null,
var paramMap:Map?=null,
var shouldSendDate:时间戳?=null,
变量过滤器:SmsFiltersDto?=默认过滤器
)
数据类SmsFiltersDto(
变量yourField:Boolean=false,
...
)