gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:47:35 25 4
gpt4 key购买 nike

我必须从网络服务获取数据,我正在使用 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 类,对于误解,我们深表歉意。

最佳答案

也许这会有所帮助:

//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 数组元素可以是不同类型,那么映射器将不知道要实例化哪种类型的类,并且你需要在 json 中提供附加属性来表明这一点,这是一种丑陋的方法,特别是如果json 是面向外部的。但如果这是你想要的,那么 this 中会对此进行解释。所以发帖。

关于java - 如何将 JSON 读取到 java 中的通用对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com