Android改造-将对象解析为列表

Android改造-将对象解析为列表,android,retrofit,Android,Retrofit,我正在使用改装从thing speak获取数据。我得到的响应是包含JSON对象,如“field1”、“field2”等。是否可以通过改造来解析这些数据,以获得包含这些元素的列表 现在我已经做了如下分析: @SerializedName("field1") val field1: Float?, @SerializedName("field2") val field2: Float?, @SerializedName("field3") val field3: Float?, @Serialize

我正在使用改装从thing speak获取数据。我得到的响应是包含JSON对象,如“field1”、“field2”等。是否可以通过改造来解析这些数据,以获得包含这些元素的列表

现在我已经做了如下分析:

@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?
@SerializedName("field[]")
val fields List<Float>
{"created_at":"2019-05-24T06:11:43Z","entry_id":15419693,"fields":["370",:"56.390658174097666", "45"]}
我得到的答复是:

{"created_at":"2019-05-24T06:11:43Z","entry_id":15419693,"field1":"370","field2":"56.390658174097666"}
我想得到这样的东西:

@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?
@SerializedName("field[]")
val fields List<Float>
{"created_at":"2019-05-24T06:11:43Z","entry_id":15419693,"fields":["370",:"56.390658174097666", "45"]}
@SerializedName(“字段[]”)
val字段列表

这可能吗?

您可以创建自定义JSON解析器,但不建议这样做。使用改型解析器要好得多

您无法按照所述进行分析,但如果您可以更新服务器响应,则会更好,因此如下所示:

@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?
@SerializedName("field[]")
val fields List<Float>
{"created_at":"2019-05-24T06:11:43Z","entry_id":15419693,"fields":["370",:"56.390658174097666", "45"]}
然后在你的课堂上定义

 @SerializedName("fields")
 var fields: List<Float>?
@SerializedName(“字段”)
变量字段:列表?
编辑:

如果您无法更新服务器响应,您所能做的一切就是定义助手函数:

 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;
}
public fun getFields():ArrayList{
var list=ArrayList()
列表。添加(字段1)
列表。添加(字段2)
列表。添加(字段3)
列表。添加(字段4)
列表。添加(字段5)
列表。添加(字段6)
列表。添加(字段7)
列表。添加(字段8)
list.removeIf{it==null}
退货清单;
}

@SerializedName(“field[]”
表示
Web Api响应中存在动态键
,这是
改型
无法处理的。键必须是静态的,值可能是动态的。@NickBapu-所以我唯一能做的就是为每个值使用单独的字段?比如@SerializedName(“field1”)、@SerializedName(“field2”)等?是的。我以前从未见过这个
JSON对象的
键是动态的!不幸的是,响应来自thingspeak.com,我无法更改它。我编辑了答案,它只是有帮助,它不能解决您的问题:)它应该在服务器端修复。