Java 解析JSON对象并将其存储到现有的ArrayList中

Java 解析JSON对象并将其存储到现有的ArrayList中,java,json,arraylist,Java,Json,Arraylist,我有一个方法可以将我的对象写入JSON文件,有没有一种方法可以读取对象并将它们存储回ArrayList?理想情况下,我希望将对象存储到“music”ArrayList中 写入JSON方法: public class TimelineLayout extends JFrame { private static final long serialVersionUID = 1L; private JLabel timelineLabel; static ArrayList<

我有一个方法可以将我的对象写入JSON文件,有没有一种方法可以读取对象并将它们存储回ArrayList?理想情况下,我希望将对象存储到“music”ArrayList中

写入JSON方法:

public class TimelineLayout extends JFrame {
    private static final long serialVersionUID = 1L;
    private JLabel timelineLabel;
    static ArrayList<Music> music = new ArrayList<>();

    public static void saveMusic(ArrayList<Music> music, String filename) {

        String fn;
        Gson gson = new Gson();
        JsonElement element = gson.toJsonTree(music, new TypeToken<ArrayList<Music>>() {
        }.getType());
        JsonArray jsonArray = element.getAsJsonArray();
        String json = gson.toJson(jsonArray);
        try {
            //write converted json data to a file named "objects.json"
            if (filename != null) {
                fn = "objects.json";
            } else {
                fn = filename + ".json";
            }
            FileWriter writer = new FileWriter(fn);
            writer.write(json);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
正在尝试使用GSON库进行分析:

public static List<Music> loadMusic() {

    ArrayList<Music> musicList = new ArrayList<>();
    Gson gson = new Gson();
    JsonParser jsonParser = new JsonParser();
    try {
        BufferedReader br = new BufferedReader(new FileReader("objects.json"));
        JsonElement jsonElement = jsonParser.parse(br);

        //Create generic type
        java.lang.reflect.Type type = new TypeToken<List<Music>>() {
        }.getType();
        return gson.fromJson(jsonElement, type);

    } catch (IOException e) {
        e.printStackTrace();
    }

    return musicList;
}
公共静态列表loadMusic(){
ArrayList musicList=新的ArrayList();
Gson Gson=新的Gson();
JsonParser JsonParser=新的JsonParser();
试一试{
BufferedReader br=新的BufferedReader(新文件阅读器(“objects.json”);
JsonElement=jsonParser.parse(br);
//创建泛型类型
java.lang.reflect.Type=new-TypeToken(){
}.getType();
返回gson.fromJson(jsonElement,类型);
}捕获(IOE异常){
e、 printStackTrace();
}
回归音乐家;
}

您可以使用像GSON或Jackson这样的JSON解析器库来实现这一点。通过谷歌搜索这些术语来获取如何使用这些库的示例。我目前正在使用GSON library来完成此方法,尽管我似乎没有幸将其存储到arrayList中,但我将使用我当前的读取方法进行更新。在您的try块中,尝试使用以下代码:
try{BufferedReader br=new BufferedReader(new FileReader(objects.json));返回gson.fromJson(br,new-TypeToken(){}.getType());}
如何使用对象访问此ArrayList?您可以执行类似于
musicList=gson.fromJson(br,new-TypeToken(){}.getType()的操作,而不是直接从try块内部返回ArrayList
musicList
对象现在是一个
ArrayList
对象,其中填充了json文件中的
Music
对象。从
loadMusic()
函数返回后,您可以正常访问它,例如,您可以从
main
方法调用
ArrayList myMusicList=loadMusic()
。我是否正确理解了您的问题?这有帮助吗?您可以使用GSON或Jackson之类的JSON解析器库来做到这一点。通过谷歌搜索这些术语来获取如何使用这些库的示例。我目前正在使用GSON库来完成此方法,尽管我似乎没有运气将其存储到arrayList中,但我将使用我的当前读取方法。在try块中,尝试使用以下代码:
try{BufferedReader br=new BufferedReader(new FileReader(objects.json));返回gson.fromJson(br,new TypeToken(){}.getType());}
如何使用对象访问此ArrayList?您可以执行类似于
musicList=gson.fromJson(br,new-TypeToken(){}.getType())的操作,而不是直接从try块内部返回ArrayList
musicList
对象现在是一个
ArrayList
对象,其中填充了json文件中的
Music
对象。从
loadMusic()
函数返回后,您可以正常访问它,例如,您可以从
main
方法调用
ArrayList myMusicList=loadMusic();
。我正确理解你的问题了吗?这有帮助吗?
public static List<Music> loadMusic() {

    ArrayList<Music> musicList = new ArrayList<>();
    Gson gson = new Gson();
    JsonParser jsonParser = new JsonParser();
    try {
        BufferedReader br = new BufferedReader(new FileReader("objects.json"));
        JsonElement jsonElement = jsonParser.parse(br);

        //Create generic type
        java.lang.reflect.Type type = new TypeToken<List<Music>>() {
        }.getType();
        return gson.fromJson(jsonElement, type);

    } catch (IOException e) {
        e.printStackTrace();
    }

    return musicList;
}