我正在尝试从JSON响应中反序列化一个嵌套数组。这是我第一次得到一个数组的数组,我不太确定如何构造我的类来处理它。
{
"prices": [
[
1641670404234,
0.01582586939240936
],
[
1641674037525,
0.015999047707867396
],
[
1641677655158,
0.016072905257982606
]
...
],
}
如果括号是{
而不是[
{
"prices": {
{
1641670404234,
0.01582586939240936
},
{
1641674037525,
0.015999047707867396
},
{
1641677655158,
0.016072905257982606
}
}
...
}
我可以用
第一个
然而,由于它是[
,我不太确定如何构造它。
我尝试向其中添加另一个List
Package 器,但这会引发错误
第一个
我也试过用JSONArray
Package 它
@SerializedName("prices")
private List<JSONArray<Price>> prices;
但这并不完全正确
我试着搜索其他的SO答案,但我找不到任何例子,它是两个连续的[ [
括号。
它们都是{ [
或[ {
。
正确的做法是什么?
2条答案
按热度按时间wbrvyc0a1#
解决这个问题的正确方法是为
Price
类编写一个自定义的TypeAdapter
。(使用List<Price> prices
字段),并让它们更接近地表示实际数据。那么您必须手动验证JSON数据是否格式正确,并且必须自己将List<BigDecimal>
转换为Price
对象。下面是
Price
类的TypeAdapter
实现的外观:注:除了手动阅读
BigDecimal
,您还可以在TypeAdapterFactory
中创建此类型适配器,并获取BigDecimal
的默认Gson适配器。这允许在您自己的类型适配器中重用Gson的内置适配器,但对于BigDecimal
,这种开销可能不值得。然后,您可以在
GsonBuilder
示例上注册适配器,也可以在Price
类上放置一个@JsonAdapter
注解,该注解引用适配器。您可能希望通过在适配器上调用nullSafe()
来创建一个null
安全的适配器变体(或者您在适配器中手动实现null
处理)。bkkx9g8r2#
假设这是正确的JSON:
然后,您可以使用此模型将数据反序列化为:
JAVA语言:
Kotlin:
Java和Kotlin的便捷JSON转换器。