Java gson错误:应为BEGIN\u对象,但为BEGIN\u数组(但我的类型映射是否正确?)

Java gson错误:应为BEGIN\u对象,但为BEGIN\u数组(但我的类型映射是否正确?),java,json,gson,Java,Json,Gson,我收到一个gson异常:预期的BEGIN\u对象是BEGIN\u数组。然而,我不清楚为什么,因为我表示的结构是正确的 我的数据: [ { "aws.amazon.com": 426788 }, { "atsv2-fp.wg1.b.yahoo.com": 141154 }, { "e2svi.x.incapdns.net": 140445 }, { "stackoverflow.

我收到一个gson异常:预期的BEGIN\u对象是BEGIN\u数组。然而,我不清楚为什么,因为我表示的结构是正确的

我的数据:

[
    {
        "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;
}
例外情况:

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": [
       ...
    ]
}
或者,您可以获取列表的
类型
,并直接转换为它。例如,使用原始json,以下代码:

Type type = new TypeToken<List<Map<String, Float>>>() {}.getType();
List<Map<String, Float>> myList = gson.fromJson(output, type);
System.out.println("myList='"+myList+"'");
Type Type=new-TypeToken(){}.getType();
List myList=gson.fromJson(输出,类型);
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}]

Type type = new TypeToken<List<Map<String, Float>>>() {}.getType();
List<Map<String, Float>> myList = gson.fromJson(output, type);
System.out.println("myList='"+myList+"'");