Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中用于不同对象解析json文件的通用方法_Java_Methods - Fatal编程技术网

Java中用于不同对象解析json文件的通用方法

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());

我有一个解析器方法来解析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;
}
公共静态列表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);