在 Kotlin 中解析带有动态字段的 json 对象
Posted
技术标签:
【中文标题】在 Kotlin 中解析带有动态字段的 json 对象【英文标题】:Parsing a json object with a dynamic field in Kotlin 【发布时间】: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 对象?
【问题讨论】:
【参考方案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,
...
)
【讨论】:
以上是关于在 Kotlin 中解析带有动态字段的 json 对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有 ktor 框架的 graphql-kotlin 进行字段级解析器
如何使用带有 Kotlin 的 Gson 库访问 JSON 有效负载中的嵌套值
在android中使用GSON解析带有动态“key”和“value”的JSON