代码之家  ›  专栏  ›  技术社区  ›  RandomUser

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

  •  1
  • RandomUser  · 技术社区  · 8 年前

    我的数据:

    [
        {
            "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
    

    1 回复  |  直到 8 年前
        1
  •  3
  •   azurefrog    8 年前

    那是因为 GroupedTotals 列表。

    {
        "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}]”