How to save data with gson in a json file?

后端 未结 3 2056
野的像风
野的像风 2021-02-05 02:45

In my web application I succeed in displaying data in html table using mybatis. Now I want to save the records of the Mysql table in a json file and create an array of users, I

3条回答
  •  离开以前
    2021-02-05 03:40

    I was previously using outputStream.writeObject and Serializable with default writer/reader for saving object data. Because of problems with code sustainability I have been after something else. This is the result. That BufferedWriter is mandatory, otherwise write speed drops 8 times. Notice that UTF-8 declaration which is default encoding of Json. Not sure whether not declaring it is safe.

    Example:

    private void saveJson(Object object, Type type, String directory, String fileName) {
    
        File file = new File(getApplicationContext().getDir(directory, Context.MODE_PRIVATE),
                fileName);
        OutputStream outputStream = null;
        Gson gson = new GsonBuilder().enableComplexMapKeySerialization().setPrettyPrinting()
                .create();
        try {
            outputStream = new FileOutputStream(file);
            BufferedWriter bufferedWriter;
            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream,
                        StandardCharsets.UTF_8));
            } else {
                bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
            }
    
            gson.toJson(object, type, bufferedWriter);
            bufferedWriter.close();
    
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            if (DEBUG) Log.e(saveJson, "saveUserData, FileNotFoundException e: '" + e + "'");
        } catch (IOException e) {
            e.printStackTrace();
            if (DEBUG) Log.e(saveJson, "saveUserData, IOException e: '" + e + "'");
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.flush();
                    outputStream.close();
                } catch (IOException e) {
                    if (DEBUG) Log.e(saveJson, "saveUserData, finally, e: '" + e + "'");
                }
            }
        }
    
    }
    
    
    private Object loadJson(Type type,  String directory, String fileName) {
        Object jsonData = null;
    
        File file = new File(getApplicationContext().getDir(directory, Context.MODE_PRIVATE),
                fileName);
        InputStream inputStream = null;
        Gson gson = new GsonBuilder().enableComplexMapKeySerialization().setPrettyPrinting()
                .create();
        try {
            inputStream = new FileInputStream(file);
            InputStreamReader streamReader;
            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                streamReader = new InputStreamReader(inputStream,
                        StandardCharsets.UTF_8);
            } else {
                streamReader = new InputStreamReader(inputStream, "UTF-8");
            }
    
            jsonData = gson.fromJson(streamReader, type);
            streamReader.close();
    
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            if (DEBUG) Log.e(TAG, "loadJson, FileNotFoundException e: '" + e + "'");
        } catch (IOException e) {
            e.printStackTrace();
            if (DEBUG) Log.e(TAG, "loadJson, IOException e: '" + e + "'");
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    if (DEBUG) Log.e(TAG, "loadJson, finally, e: '" + e + "'");
                }
            }
        }
        return jsonData;
    }
    

    where Type for example:

    Type type = new TypeToken>() { }.getType();
    

提交回复
热议问题