【发布时间】:2015-06-04 02:31:42
【问题描述】:
我必须从 Web 服务获取数据,我正在使用 Jackson,但使用 Gson 时遇到同样的问题,我对单个对象没有问题,但是当我收到多个对象列表时,这对我来说并不容易。
收到的 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 类,很抱歉造成误解。
【问题讨论】:
-
我猜 MyClass 是您的类支持 JSON 对象吗?也许如果我们能看到这个类和错误堆栈跟踪,就会更容易找出问题所在。
-
A List
将是 [{...}, {...}, ...]。你有{"country": [{...}, {...}, ...]}。这不是一个列表,它是一个带有字段country的对象,它是一个列表。 -
您在最外层有一个 JSON 对象,而不是 JSON 数组。这转化为地图,而不是列表。
-
嗯,是的,我认为这就是为什么我不能像数组一样直接获取列表或类似的东西,我在其他解决方案中看到它将实现一个具有名为 country 的属性的类一个列表
,但我需要一种方法,它也适用于其他类型,不仅适用于 CountryWSType。不知道我解释的对不对……