首页 > 解决方案 > Kotlinx 将 JSON Array 序列化为数据类

问题描述

对于我的 Android 应用程序,我尝试使用 Kotlinx 序列化来解析网络响应。网络响应是来自Kraken的 WebSocket Payload ,看起来像一个 JSON 数组,其中包含没有键的元素。我想为此响应创建一个数据类并分配缺少的键。网络响应如下所示:

 [
  324,
  {
    "a": [
      "65534.00000",
      8,
      "8.45840938"
    ],
    "b": [
      "65533.90000",
      0,
      "0.00352122"
    ],
    "c": [
      "65533.90000",
      "0.00458332"
    ],
    "v": [
      "2282.41761567",
      "3048.01677262"
    ],
    "p": [
      "65297.21555",
      "64608.96127"
    ],
    "t": [
      27317,
      38224
    ],
    "l": [
      "63319.60000",
      "61810.00000"
    ],
    "h": [
      "66420.00000",
      "66420.00000"
    ],
    "o": [
      "63319.60000",
      "61962.00000"
    ]
  },
  "ticker",
  "XBT/USD"
]

标签: androidjsonkotlinserializationkotlinx

解决方案


对于 JSON 数组

[{
  "id": 324,
  "items": {
    "a": [
      "65534.00000",
      8,
      "8.45840938"
    ],
    "b": [
      "65533.90000",
      0,
      "0.00352122"
    ],
    "c": [
      "65533.90000",
      "0.00458332"
    ],
    "v": [
      "2282.41761567",
      "3048.01677262"
    ],
    "p": [
      "65297.21555",
      "64608.96127"
    ],
    "t": [
      27317,
      38224
    ],
    "l": [
      "63319.60000",
      "61810.00000"
    ],
    "h": [
      "66420.00000",
      "66420.00000"
    ],
    "o": [
      "63319.60000",
      "61962.00000"
    ]
  },
  "unit" : "ticker",
  "code" : "XBT/USD"}
]

Kotlin 数据类将是

import com.google.gson.annotations.SerializedName

   
data class Example (

   @SerializedName("id") var id : Int,
   @SerializedName("items") var items : Items,
   @SerializedName("unit") var unit : String,
   @SerializedName("code") var code : String

)

但是,您的响应看起来不像 JSON 数组,其格式应为:

[{},{},{}]

您的回复是正常的形式数组:

[,,,]

推荐阅读