gpt4 book ai didi

java - 如何使用 Jackson ObjectMapper 将 json 读入仅知道实体类的集合

转载 作者:行者123 更新时间:2023-12-02 03:28:56 36 4
gpt4 key购买 nike

我有一个 json 文件,其中包含给定类型的列表,例如:

   [{
"createdBy":"SYSTEM_INIT",
"status":401,
"message":"Unauthorized",
"description":"",
"lang":"en"
},{
"createdBy":"SYSTEM_INIT",
"status":413,
"message":"Payload Too Large",
"description":"The request is larger than the server is willing or able to process",
"lang":"en"
}{....

我有一个java类(本例中称为MyClass)代表这个实体。当我想将 json 反序列化到集合中时,我只有 Class对象,其中是 MyClass.class 。如何读入 Collection<MyClass>

实际上它是一个 Spring 应用程序,这是我当前的代码:

public boolean importFromJsonFile(String table, Class clazz) {
Collection<Object> objectCollection = new ArrayList<>();

ObjectMapper mapper = new ObjectMapper();
try {
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("init/" + table + ".import.json").getFile());
objectCollection = mapper.readValue(file, Collection.class);
}catch (Exception e){
log.error("error: ", e);
return false;
}

if(objectCollection.size() < 0){
log.error("There is no data in the file");
return false;
}

try {
for(Object obj : objectCollection){
save(obj, clazz);
}
}catch (Exception e){
log.error("fatal error: ", e);
return false;
}

return true;
}

所以我的问题是在读取文件后结果将是 LinkedHasMap 的集合而不是CollectionMyClass此特定样本中的 with 由​​变量 clazz 表示。有什么办法可以做到这一点吗?

最佳答案

有办法

List<MyClass> myObjects = Arrays.asList(mapper.readValue(file, MyClass[].class))

您可以采用不同的方法here不过,这个速度更快。

基于评论(正如提到的,类变量和文件存在于运行时):

public List getObjects(Class<T> aClass, File file) throws ClassNotFoundException, IOException {
ObjectMapper mapper = new ObjectMapper();
//Fetches Arrayed Class
Class namedClass = Class.forName("[L" + aClass.getName() + ";");
List myObjects = Arrays.asList(mapper.readValue(file, namedClass));
return myObjects;
}

关于java - 如何使用 Jackson ObjectMapper 将 json 读入仅知道实体类的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38377908/

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