2017-08-08 13 views
1

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をカプセル化配列のないマップに変更するとうまくいきますが、上で書いたように配列で動作する必要があります。

答えて

3

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}]'

関連する問題