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

时间:2017-11-23 10:03:56

标签: 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": false, "RECENT": "{ \"unit\": \"MINUTE\", \"size\": 5 }"
}

我使用Spring Boot和Kotlin。 Spring启动会自动将提到的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
)

如您所见,我遇到的问题是filters字段,它是String,但可能包含另一个JSON对象。所以我使用了一个懒惰的解决方案来转义内部JSON双引号然后自己解析它。

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

1 个答案:

答案 0 :(得分:2)

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

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,
    ...
)