我必须从网络服务获取数据,我使用的是杰克逊,但我使用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类,对不起被误解了。
答案 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。
中解释的那样