如何使用Kotlinx Serialization将Kraken WebSocket JSON数组转Data Class
实现Kotlinx Serialization解析Kraken WebSocket Ticker响应方案
前置配置
首先确保项目已正确集成Kotlinx Serialization:
- 项目根目录
build.gradle.kts添加插件依赖 - 业务模块
build.gradle.kts应用插件并引入序列化核心依赖
对应Data Class定义
返回结构最外层为无键JSON数组,使用@SerialIndex注解按数组下标映射字段,金融类数值统一使用String类型避免浮点精度丢失:
import kotlinx.serialization.Serializable import kotlinx.serialization.SerialIndex import kotlinx.serialization.SerialName // 最外层响应结构,对应4元素JSON数组 @Serializable data class KrakenTickerResponse( @SerialIndex(0) val channelId: Int, @SerialIndex(1) val tickerData: TickerData, @SerialIndex(2) val messageType: String, @SerialIndex(3) val tradePair: String ) // Ticker核心数据结构 @Serializable data class TickerData( @SerialName("a") val ask: TickerLevel3, // 卖盘数据 @SerialName("b") val bid: TickerLevel3, // 买盘数据 @SerialName("c") val close: TickerLevel2, // 最新成交数据 @SerialName("v") val volume: TickerPeriodPair, // 成交量 @SerialName("p") val vwap: TickerPeriodPair, // 加权平均价 @SerialName("t") val tradeCount: TickerPeriodIntPair, // 成交笔数 @SerialName("l") val lowPrice: TickerPeriodPair, // 最低价 @SerialName("h") val highPrice: TickerPeriodPair, // 最高价 @SerialName("o") val openPrice: TickerPeriodPair // 开盘价 ) // 三级结构:对应a、b字段的三元素数组 @Serializable data class TickerLevel3( @SerialIndex(0) val price: String, @SerialIndex(1) val orderCount: Int, @SerialIndex(2) val amount: String ) // 二级结构:对应c字段的两元素数组 @Serializable data class TickerLevel2( @SerialIndex(0) val price: String, @SerialIndex(1) val amount: String ) // 双周期字符串对:对应v、p、l、h、o的两元素数组(近24小时/今日) @Serializable data class TickerPeriodPair( @SerialIndex(0) val last24h: String, @SerialIndex(1) val today: String ) // 双周期整数对:对应t字段的两元素数组 @Serializable data class TickerPeriodIntPair( @SerialIndex(0) val last24h: Int, @SerialIndex(1) val today: Int )
反序列化使用示例
import kotlinx.serialization.json.Json val jsonDecoder = Json { ignoreUnknownKeys = true coerceInputValues = true // 可选,兼容类型差异 } // 直接传入WebSocket收到的原始字符串即可完成解析 val tickerResponse = jsonDecoder.decodeFromString<KrakenTickerResponse>(rawWebSocketMsg)
注:
@SerialIndex注解需要kotlinx-serialization-core 1.3.0及以上版本支持。
内容的提问来源于stack exchange,提问作者Peter Renz
相关产品推荐
相关产品推荐

