Android Retrofit-将对象解析为列表

时间:2019-05-24 06:53:48

标签: android retrofit

我正在使用翻新从说话的声音中获取数据。我得到的响应包含JSON对象,例如“ field1”,“ field2”等。是否可以通过Retrofit解析此数据以获得包含该元素的列表?

目前,我的解析是这样的:

@SerializedName("field1")
val field1: Float?,
@SerializedName("field2")
val field2: Float?,
@SerializedName("field3")
val field3: Float?,
@SerializedName("field4")
val field4: Float?,
@SerializedName("field5")
val field5: Float?,
@SerializedName("field6")
val field6: Float?,
@SerializedName("field7")
val field7: Float?,
@SerializedName("field8")
val field8: Float?

我得到的答复:

{"created_at":"2019-05-24T06:11:43Z","entry_id":15419693,"field1":"370","field2":"56.390658174097666"}

我想得到这样的东西:

@SerializedName("field[]")
val fields List<Float>

有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以创建自定义JSON解析器,但不建议这样做。最好使用Retrofit解析器。

您无法按照您的描述进行解析,但是如果您可以更新服务器响应,那就更好了,所以看起来像这样:

{"created_at":"2019-05-24T06:11:43Z","entry_id":15419693,"fields":["370",:"56.390658174097666", "45"]}

然后在您的课程中定义

 @SerializedName("fields")
 var fields: List<Float>?

编辑:

如果您无法更新服务器响应,则可以做的就是定义助手功能:

 public fun getFields() : ArrayList<Float?> {
        var list = ArrayList<Float?>()

        list.add(field1)
        list.add(field2)
        list.add(field3)
        list.add(field4)
        list.add(field5)
        list.add(field6)
        list.add(field7)
        list.add(field8)

        list.removeIf { it == null }

        return list;
}