2014-08-28 47 views
0

我在将Json对象列表转换为Java列表时遇到了一些问题。我正在使用GSon来做到这一点。 我有以下的Json列表:Gson -Json列表到Java列表<Object>

{"player": 
    [ 
    {"id":"1","age":"25","name":"Neuer"}, 
    {"id":"2","age":"26","name":"Cristiano Ronaldo"}, 
    {"id":"3","age":"24","name":"Lionel Messi"} 
    ] 
} 

和我有以下Java对象:

public class PlayerDTO implements Serializable { 

    private int id; 
    private String name; 
    private int age; 

    //Getters and Setters 
} 

在我的Java类我做:

Type collectionType = new TypeToken<ArrayList<PlayerDTO>>(){}.getType(); 
List<PlayerDTO> players = gson.fromJson(jsonString, collectionType); 

但是,当Gson试图转换Json时T I收到错误:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 
at com.google.gson.Gson.fromJson(Gson.java:817) 
at com.google.gson.Gson.fromJson(Gson.java:770) 
at com.google.gson.Gson.fromJson(Gson.java:719) 
at com.google.gson.Gson.fromJson(Gson.java:691) 
at br.com.test.TesteGson.main(TesteGson.java:33) 
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 
at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:351) 
at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:70) 
at com.google.gson.Gson.fromJson(Gson.java:805) 
... 4 more 

我所知,这是因为在GSON期待JSON的没有对JSON字符串的开头“玩家”。你可以帮我吗?谢谢!

+0

我的建议是建立一个'PlayerCollection'类型的含有适当的球员名单属性.. – user2864740 2014-08-28 19:54:01

+1

(?)无论如何,请参阅http://stackoverflow.com/questions/12004338/skip-root-element-while-deserializing-json - 但这些方法看起来很烂 – user2864740 2014-08-28 19:56:41

+1

看来gson现在与[流api](https://网站。 google.com/site/gso N /流)使用它可以避免额外的解析。 – 2014-08-28 20:09:14

回答

1

解决此问题的最简单方法是创建一个Players类作为玩家的集合。

这里是Players类:

import java.util.ArrayList; 
import java.util.List; 
import com.google.gson.annotations.Expose; 

public class Players { 

@Expose 
private List<Player> players = new ArrayList<Player>(); 

public List<Player> getPlayer() { 
return player; 
} 

public void setPlayer(List<Player> player) { 
this.player = player; 
} 

} 

Player类:

import com.google.gson.annotations.Expose; 

public class Player { 

@Expose 
private String id; 
@Expose 
private String age; 
@Expose 
private String name; 

public String getId() { 
return id; 
} 

public void setId(String id) { 
this.id = id; 
} 

public String getAge() { 
return age; 
} 

public void setAge(String age) { 
this.age = age; 
} 

public String getName() { 
return name; 
} 

public void setName(String name) { 
this.name = name; 
} 

} 
+0

嗯,我相信这不是最好的解决方案。希望其他人给我另一种解决方案。 – arielmolina 2014-08-29 12:35:42