Java中用于不同对象解析json文件的通用方法
我有一个解析器方法来解析json文件。我为ClassA创建了它,但我也希望将它用于不同的类,比如ClassB和ClassC 我的代码:Java中用于不同对象解析json文件的通用方法,java,methods,Java,Methods,我有一个解析器方法来解析json文件。我为ClassA创建了它,但我也希望将它用于不同的类,比如ClassB和ClassC 我的代码: public static List<ClassA> parseFromFile(String path){ JSONParser parser = new JSONParser(); List<ClassA> list = new ArrayList<>(Collections.emptyList());
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;
}
公共静态列表parseFromFile(字符串路径){
JSONParser=新的JSONParser();
List List=newarraylist(Collections.emptyList());
试一试{
BufferedReader in=新的BufferedReader(新文件读取器(路径));
字符串输入线;
而((inputLine=in.readLine())!=null){
JSONArray a=(JSONArray)parser.parse(inputLine);
(对象o:a){
JSONObject JSONObject=(JSONObject)o;
ClassA=new Gson().fromJson(String.valueOf(jsonObject),ClassA.class);
列表.添加(a);
}
}
in.close();
}catch(IOException | ParseException e){
e、 printStackTrace();
}
退货清单;
}
将类作为参数传入。您需要更改以下行:
public static <T> List<T> parseFromFile(String path, Class<T> type){
JSONParser parser = new JSONParser();
List<T> list = new ArrayList<>(Collections.emptyList());
如果我是,您会检查这个实现是否有意义:看起来您首先使用
org.json
库解析文件内容,然后再转换回json,然后使用Gson再次解析。您只需分析一次:
BufferedReader in = new BufferedReader(new FileReader(path));
T a = new Gson().fromJson(in, klass);
使用泛型
public static List parseFromFile(String path,Class targetclass){
和这个ta=new Gson().fromJson(String.valueOf(jsonObject),targetclass);
谢谢你的回答。但是我想问一下,我的文件包含很多对象,所以“ta=new Gson().fromJson(in,klass);”不起作用。你能帮我一下吗?你的文件如何包含许多对象?你是说文件包含一个JSON数组?还是只是几个对象,一个接一个,没有任何分隔?是的,它包含JSON数组。很抱歉误导你。数组中的对象都是相同类型的吗?然后你会使用“类型令牌”而不是课堂-请参阅此处的完整问题和答案
BufferedReader in = new BufferedReader(new FileReader(path));
T a = new Gson().fromJson(in, klass);