Java gson错误:预计BEGIN_OBJECT,但是BEGIN_ARRAY(但我的类型映射是正确的?)
问题描述:
我得到一个gson异常:期望的BEGIN_OBJECT,但是BEGIN_ARRAY。但是,我不清楚为什么我已经表示结构正确。Java gson错误:预计BEGIN_OBJECT,但是BEGIN_ARRAY(但我的类型映射是正确的?)
我的数据:
[
{
"aws.amazon.com": 426788
},
{
"atsv2-fp.wg1.b.yahoo.com": 141154
},
{
"e2svi.x.incapdns.net": 140445
},
{
"stackoverflow.com": 87624
},
{
"a-sg03sl05.insnw.net": 56665
}
]
我GSON对象:
public class GroupedTotals {
public List<Map<String, Float>> BSRecvDestDNSName;
}
用法:
Gson gson = new Gson();
GroupedTotals groupedTotals = gson.fromJson(output, GroupedTotals.class);
例外:
Parse Error: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
有什么建议吗?如果我将代码和json更改为没有封装数组的映射,它可以正常工作,但我需要它像上面所写的那样处理数组。
答
这是因为GroupedTotals
不是一个列表,它是包含列表的对象。
,将转换为类的一个实例有效的JSON看起来像
{
"BSRecvDestDNSName": [
...
]
}
另外,还可以得到Type
的列表,并直接转换到它。例如,使用原来的JSON,此代码:
Type type = new TypeToken<List<Map<String, Float>>>() {}.getType();
List<Map<String, Float>> myList = gson.fromJson(output, type);
System.out.println("myList='"+myList+"'");
输出
myList='[{aws.amazon.com=426788.0}, {atsv2-fp.wg1.b.yahoo.com=141154.0}, {e2svi.x.incapdns.net=140445.0}, {stackoverflow.com=87624.0}, {a-sg03sl05.insnw.net=56665.0}]'