我收到一个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/