json转file

json转file

package util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

/**
 * Created on 2018/6/21.
 *
 * @desc json转file
 */
public class JsonToFile {
    /**
     * json文件
     *
     * @param jsonString json字符串
     * @param filePath   文件路径
     * @param fileName   文件名
     * @return json文件
     */
    public static boolean createJsonFile(String jsonString, String filePath, String fileName) {
        // 文件生成否
        boolean flag = true;
        // 拼接文件完整路径
        String fullPath = filePath + File.separator + fileName + ".json";
        // 生json文件
        try {
            // 创新文件
            File file = new File(fullPath);
            if (!file.getParentFile().exists()) {
                // 父目录不存则创父目录
                file.getParentFile().mkdirs();
            }
            if (file.exists()) {
                // 已存删旧文件
                file.delete();
            }
            file.createNewFile();
            // 格式化json字符串
            jsonString = JsonFormat.formatJson(jsonString);
            // 格式化后字符串写入文件
            Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
            write.write(jsonString);
            write.flush();
            write.close();
        } catch (Exception e) {
            flag = false;
            e.printStackTrace();
        }
        // 返成否
        return flag;
    }
}

格式化

package util;

/**
 * Created on 2018/6/21.
 *
 * @desc json格式化
 */
public class JsonFormat {
    /**
     * 格式化json字符串
     *
     * @param json 未格式化json字符串
     * @return 格式化json字符串
     */
    public static String formatJson(String json) {
        StringBuilder result = new StringBuilder();
        int length = json.length();
        int number = 0;
        char key;
        // 遍历输入字符串
        for (int i = 0; i < length; i++) {
            // 一【当前字符】
            key = json.charAt(i);
            // 二【当前字符前是括号/花括号】
            if ((key == '[') || (key == '{')) {
                // (1)前仍有字符且“:”,打印换行缩进
                if ((i - 1 > 0) && (json.charAt(i - 1) == ':')) {
                    result.append('\n');
                    result.append(indent(number));
                }
                // (2)打印当前字符
                result.append(key);
                // (3)前方括号/花括号则后换行
                result.append('\n');
                // (4)每现一次前方括号/花括号,缩进次数增一
                number++;
                result.append(indent(number));
                // (5)下次循环
                continue;
            }
            // 三【当前字符后方括号/花括号】
            if ((key == ']') || (key == '}')) {
                // (1)后方括号/花括号则前换行
                result.append('\n');
                // (2)每现一次后方括号/花括号,缩进次数减一
                number--;
                result.append(indent(number));
                // (3)打印当前字符
                result.append(key);
                // (4)当前字符后还有字符且不为“,”
                if (((i + 1) < length) && (json.charAt(i + 1) != ',')) {
                    result.append('\n');
                }
                // (5)下次循环
                continue;
            }
            // 四【当前字符逗号,逗号后换行缩进,不改缩进次数】
            if ((key == ',')) {
                result.append(key);
                result.append('\n');
                result.append(indent(number));
                continue;
            }
            // 五【打印当前字符】
            result.append(key);
        }
        return result.toString();
    }

    /**
     * 返指定次数的缩进字符串(每次缩三空格,即SPACE)
     *
     * @param number 缩进次数
     * @return 指定缩进次数的字符串
     */
    private static String indent(int number) {
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < number; i++) {
            String space = "   ";
            result.append(space);
        }
        return result.toString();
    }
}

主代码

JsonToFile.createJsonFile(response.toString(), Environment.getExternalStorageDirectory().getAbsolutePath() + "/MzhzRecord/", "file");

json格式化

猜你喜欢

转载自blog.csdn.net/zsp_android_com/article/details/80765818