【问题标题】:Parsing a json object with a dynamic field in Kotlin在 Kotlin 中解析带有动态字段的 json 对象
【发布时间】:2018-05-07 06:05:17
【问题描述】:

我有一个 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 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
)

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

是否有更标准的解决方案可以让我发送正确的内部 JSON 对象?

【问题讨论】:

    标签: json spring-boot kotlin


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多