我收到一个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}]'

关于java - Java gson错误:预期为BEGIN_OBJECT,但为BEGIN_ARRAY(但我的类型映射正确吗?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45558308/

10-10 06:56