如何将JSON读取到java中的通用对象列表?

时间:2015-06-04 02:31:43

标签: java json jackson gson

我必须从网络服务获取数据,我使用的是杰克逊,但我使用Gson也有同样的问题,我对单个对象没有任何问题,但是当我收到多个对象列表时,对我来说并不容易。< / p>

收到的JSON是这样的:

{"country":
[
{"code":"AD","nombre":"Andorra","name":"Andorra"},
{"code":"AE","nombre":"Emiratos Árabes Unidos","name":"United Arab Emirates"}
]
}

这是我自己的类CountryWSType的列表,我有几个这样的类,需要一种方法可以获得任何类型的列表。 我试过把它解析成一个列表:

List<MyClass> myObjects = mapper.readValue(jsonInput, mapper.getTypeFactory().constructCollectionType(List.class, MyClass.class));

还尝试创建自己的列表类型:

    public class ListWSType<T> implements List<T>{

    private List<T> listaInterna;

    //implents methods
    }

但我总是得到一个JsonMappingException而且我对如何做到这一点没有更多的想法。

我希望有人可以帮助我。

有些人问这里是我试图用JSON解析的类:

@XmlRootElement(name="country")
@XmlType(propOrder={"code", "nombre", "name"})
public class CountryWSType {

    /** Código ISO */
    @XmlElement(name="code")
    public String code;

    /** Nombre en español */
    @XmlElement(name="nombre")
    public String nombre;

    /** Nombre en inglés */
    @XmlElement(name="name")
    public String name;

    /** Constructor sin parámetros. No inicializa nada...
     * Está para que funcione el marshall/unmarshall.
     */
    public CountryWSType() {}
}

另外请注意,当我把MyClass放入时,它意味着CountryWSType类,对不起被误解了。

1 个答案:

答案 0 :(得分:0)

可能会有所帮助:

//first convert input string to json array
JSONObject jsonobject = new JSONObject(countriesAsJsonString);

JSONArray jsonArray = jsnobject.getJSONArray("countries");

//then get the type for list and parse using gson as
Type listType = new TypeToken<List<MyClass>>(){}.getType();
List<MyClass> countriesList = new Gson().fromJson(jsonArray, listType);

如果你说你的json arrary元素可以是不同的类型,那么mapper将不知道要实例化哪种类型的类,你需要在你的json中提供额外的属性来表明这一点,特别是如果杰森面向外部。但是,如果这是你想要的,而不是this SO post。

中解释的那样