java - Java中不同对象解析json文件的常用方法
问题描述
我有一个解析器方法来解析一个 json 文件。我为 ClassA 创建了它,但我也想将它用于不同的类,例如 ClassB 和 ClassC
我的代码:
public static List<ClassA> parseFromFile(String path){
JSONParser parser = new JSONParser();
List<ClassA> list = new ArrayList<>(Collections.emptyList());
try {
BufferedReader in = new BufferedReader(new FileReader(path));
String inputLine;
while ((inputLine = in.readLine()) != null) {
JSONArray a = (JSONArray) parser.parse(inputLine);
for (Object o : a) {
JSONObject jsonObject = (JSONObject) o;
ClassA a = new Gson().fromJson(String.valueOf(jsonObject), ClassA.class);
list.add(a);
}
}
in.close();
} catch (IOException | ParseException e) {
e.printStackTrace();
}
return list;
}
解决方案
将类作为参数传入。您需要更改这些行:
public static <T> List<T> parseFromFile(String path, Class<T> type){
JSONParser parser = new JSONParser();
List<T> list = new ArrayList<>(Collections.emptyList());
这行:
T a = new Gson().fromJson(String.valueOf(jsonObject), klass);
如果我是您,您会查看此实现是否有意义:看起来您首先使用org.json
库解析文件内容,然后转换回 JSON,然后使用 Gson 再次解析。您只需要解析一次:
BufferedReader in = new BufferedReader(new FileReader(path));
T a = new Gson().fromJson(in, klass);
推荐阅读
- javascript - TypeScript - 如果扩展其他东西,类泛型类型太窄,如果不扩展任何东西,则不是
- python - 如何在 django admin 中更改外键字段的大小?
- java - Java Scanner nextInt() 让我按两次 Enter 以使该值被接受
- typescript - Typescript 项目引用:处理引用项目的第三方依赖项
- python - python - 如何使用正则表达式替换字符串中的特定组?
- sql - 如何使用 windows 功能检索第一个日期和最后一个日期?
- kivy - KivyMD navdrawer 是透明的
- php - 获取 JSON React to PHP
- typescript - 在 if else 语句中发出
- python - 使用 IP 地址将 neo4j 桌面与 python 连接,而不是提供本地主机