2016-07-04 56 views
0

我想使用谷歌的GSON從JSON測試解析映射,這裏是我的代碼,卻得到了一個例外:Java使用GSON從JSON格式解析映射的問題

Gson gson = new GsonBuilder().serializeNulls().setLenient().setPrettyPrinting().create(); 
Map<String, List<String>> map = new LinkedHashMap<>(); 
map = gson.fromJson("The json text", new TypeToken<Map<String, List<String>>>(){}.getType()); 

JSON的文字是:

{ 
    "Worker": { 
     "127.0.0.1:9001", 
     "127.0.0.1:9002", 
     "127.0.0.1:9003", 
     "127.0.0.1:9004", 
     "127.0.0.1:9005", 
     "127.0.0.1:9006", 
     "127.0.0.1:9007" 
    } 
} 

的錯誤信息是:

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 2 column 16 path $. 
     at com.google.gson.Gson.fromJson(Gson.java:891) 
     at com.google.gson.Gson.fromJson(Gson.java:844) 
     at com.google.gson.Gson.fromJson(Gson.java:793) 
     at TestBasic.TestBasic.main(TestBasic.java:140) 
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 2 column 16 path $. 
     at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:351) 
     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80) 
     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61) 
     at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40) 
     at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:187) 
     at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145) 
     at com.google.gson.Gson.fromJson(Gson.java:879) 
     ... 3 more 

回答

3

你的JSON文本是無效的。工人內部的字符串標記應該用json數組括起來[]

"Worker": [ 
    "127.0.0.1:9001", 
    "127.0.0.1:9002", 
    "127.0.0.1:9003", 
    "127.0.0.1:9004", 
    "127.0.0.1:9005", 
    "127.0.0.1:9006", 
    "127.0.0.1:9007" 
] 
+0

它在我更改了文本後生效,謝謝! –