JSON与文件互转

2023-10-30

JSON转文件

createJsonFile

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;
        // 生JSON文件
        try {
            // 创新文件
            File file = new File(fullPath, fileName);
            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;
    }
}
复制代码

JsonFormat

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(JsonFormat.formatJson(response), getContext().getExternalFilesDir("DfsDataSync").getAbsolutePath(), "ProjectDepartmentTeamNumberWellNumber.json");
App.azCache().put(Flag.PROJECT_DEPARTMENT_TEAM_NUMBER_WELL_NUMBER_FILE_PATH, getContext().getExternalFilesDir("DfsDataSync").getAbsolutePath() + File.separator + "ProjectDepartmentTeamNumberWellNumber.json");
复制代码

文件转JSON

JsonTransform

package util;

import android.content.Context;
import android.content.res.AssetManager;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Created on 2018/4/3.
 *
 * @author xxx
 * @desc JSON转化
 */
public class JsonTransform {
    /**
     * 文件转JSON
     *
     * @param filePath 文件路径
     * @return JSON
     */
    public static String jsonTransformFromFile(String filePath) {
        File file = new File(filePath);
        StringBuilder stringBuilder = new StringBuilder();
        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            BufferedReader bf = new BufferedReader(new InputStreamReader(fileInputStream));
            String line;
            while ((line = bf.readLine()) != null) {
                stringBuilder.append(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }

    /**
     * assets转JSON
     *
     * @param context    上下文
     * @param assetsPath assets路径
     * @return JSON
     */
    public String jsonTransformFromAssets(Context context, String assetsPath) {
        StringBuilder stringBuilder = new StringBuilder();
        try {
            AssetManager assetManager = context.getAssets();
            BufferedReader bf = new BufferedReader(new InputStreamReader(assetManager.open(assetsPath)));
            String line;
            while ((line = bf.readLine()) != null) {
                stringBuilder.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }
}
复制代码

主代码一(三级联动)

package data;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import util.JsonParse;
import util.JsonTransform;

/**
 * Created on 2018/6/26.
 *
 * @desc 项目部/对号/井号联动
 * {
 * "第五项目部": {
 * "40527": [
 * "苏6-8-23",
 * "苏6-8-25H1"
 * ]
 * }
 * "第一项目部": {
 * "30109": [
 * "白加218-341",
 * "郭6-03j"
 * ]
 * }
 * }
 */
public class ProDepTnWnLinkage {
    /**
     * 项目部
     *
     * @param filePath 文件路径
     * @return 项目部
     */
    public static List<String> projectDepartment(String filePath) {
        List<String> list = new ArrayList<>();
        String jsonString = JsonTransform.jsonTransformFromFile(filePath);
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            Iterator iterator = jsonObject.keys();
            while (iterator.hasNext()) {
                String key = (String) iterator.next();
                list.add(key);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     * 据项目部获队号
     *
     * @param filePath          文件路径
     * @param projectDepartment 项目部
     * @return 队号
     */
    public static List<String> teamNumberBaseOnProjectDepartment(String filePath, String projectDepartment) {
        List<String> list = new ArrayList<>();
        String jsonString = JsonTransform.jsonTransformFromFile(filePath);
        try {
            // 项目部
            JSONObject projectDepartmentJsonObject = new JSONObject(jsonString);
            Iterator projectDepartmentIterator = projectDepartmentJsonObject.keys();
            while (projectDepartmentIterator.hasNext()) {
                String projectDepartmentKey = (String) projectDepartmentIterator.next();
                if (projectDepartment != null && !"".equals(projectDepartment) && projectDepartmentKey.equals(projectDepartment)) {
                    // 队号
                    JSONObject teamNumberJsonObject = (JSONObject) projectDepartmentJsonObject.get(projectDepartmentKey);
                    Iterator teamNumberIterator = teamNumberJsonObject.keys();
                    while (teamNumberIterator.hasNext()) {
                        String teamNumberKey = (String) teamNumberIterator.next();
                        list.add(teamNumberKey);
                    }
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     * 据项目部对号获井号
     *
     * @param filePath          文件路径
     * @param projectDepartment 项目部
     * @param teamNumber        对号
     * @return 井号
     */
    public static List<String> wellNumberBaseOnProjectDepartmentTeamNumber(String filePath, String projectDepartment, String teamNumber) {
        List<String> list = new ArrayList<>();
        String jsonString = JsonTransform.jsonTransformFromFile(filePath);
        try {
            // 项目部
            JSONObject projectDepartmentJsonObject = new JSONObject(jsonString);
            Iterator projectDepartmentIterator = projectDepartmentJsonObject.keys();
            while (projectDepartmentIterator.hasNext()) {
                String projectDepartmentKey = (String) projectDepartmentIterator.next();
                if (projectDepartment != null && !"".equals(projectDepartment) && projectDepartmentKey.equals(projectDepartment)) {
                    // 队号
                    JSONObject teamNumberJsonObject = (JSONObject) projectDepartmentJsonObject.get(projectDepartmentKey);
                    Iterator teamNumberIterator = teamNumberJsonObject.keys();
                    while (teamNumberIterator.hasNext()) {
                        String teamNumberKey = (String) teamNumberIterator.next();
                        if (teamNumber != null && !"".equals(teamNumber) && teamNumber.equals(teamNumberKey)) {
                            // 井号
                            Object wellNumberObject = teamNumberJsonObject.get(teamNumberKey);
                            JsonArray jsonArray = JsonParse.noHeaderArrayParse(wellNumberObject.toString());
                            for (JsonElement jsonElement : jsonArray) {
                                list.add(jsonElement.toString());
                            }
                        }
                    }
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }
}
复制代码

主代码二(两级联动)

package data;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import util.JsonParse;
import util.JsonTransform;

/**
 * Created on 2018/6/27.
 *
 * @desc 施工类型/井型联动
 * {
 * "常规水平井": [
 * "三开水平井",
 * "二开水平井",
 * "大位移定向井"
 * ],
 * "常规井": [
 * "二开水平井",
 * "定向井",
 * "定向气井",
 * "直井"
 * ]
 * }
 */
public class ConstructionTypeWellTypeLinkage {
    /**
     * 施工类型
     *
     * @param filePath 文件路径
     * @return 施工类型
     */
    public static List<String> constructionType(String filePath) {
        List<String> list = new ArrayList<>();
        String jsonString = JsonTransform.jsonTransformFromFile(filePath);
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            Iterator iterator = jsonObject.keys();
            while (iterator.hasNext()) {
                String key = (String) iterator.next();
                list.add(key);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     * 井型
     *
     * @param filePath 文件路径
     * @return 井型
     */
    public static List<String> wellTypeBaseOnConstructionType(String filePath, String constructionType) {
        List<String> list = new ArrayList<>();
        String jsonString = JsonTransform.jsonTransformFromFile(filePath);
        try {
            // 施工类型
            JSONObject constructionTypeJsonObject = new JSONObject(jsonString);
            Iterator iterator = constructionTypeJsonObject.keys();
            while (iterator.hasNext()) {
                String constructionTypeKey = (String) iterator.next();
                if (constructionType != null && !"".equals(constructionType) && constructionType.equals(constructionTypeKey)) {
                    // 井型
                    Object wellTypeObject = constructionTypeJsonObject.get(constructionTypeKey);
                    JsonArray jsonArray = JsonParse.noHeaderArrayParse(wellTypeObject.toString());
                    for (JsonElement jsonElement : jsonArray) {
                        list.add(jsonElement.toString());
                    }
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }
}
复制代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSON与文件互转 的相关文章

随机推荐

  • qemu-linux-user ELF vs XCOFF 1

    最后更新2021 12 14 注 以下及以后本系列都是个人对相关技术在此时此刻的理解和研究 会根据学习深入 不断修正 但过去历史文章不见得会被 及时 修改订正 见谅 当然欢迎读者批评指正 本人虚心接受 但什么时候把文章修改正确 不好说 qe
  • 关于echarts无数据时显示问题

    我是做java开发的 最近公司让我做前端统计图表柱形图之类的 我用的就是echarts 版本是2 2 7 接下来 就说说我遇到的问题 因为我是小白 所以记录一下 ajax请求返回数据为空时显示暂无数据 echarts默认的是显示气泡 我换了
  • K-means聚类算法的应用以及实现

    K means 聚类算法属于无监督学习 它会将相似的对象归到同一个簇中 该算法原理简单 执行效率高 并且容易实现 是解决聚类问题的经典算法 尽管如此 任何一款算法都不可能做到完美无瑕 K measn 算法也有自身的不足之处 比如 K mea
  • k8s deployment 以root角色启动容器

    containers name image securityContext runAsUser 0 这样可以使容器以root用户运行 0指root用户的uid
  • C# 新增

    C 三层架构实现新增功能 第一步 用WPF实现用户界面代码 WPF中的代码就不详细说明了 现在只要和大家分享一下的是它们的后台的实现新增方法的代码 要实现我们的新增 并且新增数据 数据库必不可少 在数据库中写个新增方法的存储过程 用一个 t
  • [数学建模]MATLAB回归分析

    一 前言 第24届冬季奥林匹克运动会在北京隆重展开 我们要研究一个问题 奥运会东道主是否有优势 在历史数据中 我们发现好像东道主的国家在当年奥运会上获得金牌的数目比四年前非东道主国家获得的金牌数多 我们需要探究这个规律 二 历史背景 回归
  • 自学Python05-学会Python中的函数定义

    亲爱的同学们 今天我们将开始学习 Python 中的函数 函数就像一个魔法盒子 可以让我们在程序中执行一段代码 并且可以反复使用 这样 我们的程序就可以变得更加简洁和易于理解 现在 让我们一起来学习如何使用函数吧 首先 我们需要知道如何定义
  • Linux操作系统之进程命令和库文件

    文章目录 一 有关进程命令 1 ps命令 显示当前终端信息 2 ps ef命令 查看当前终端进程的详细信息 二 前台程序和后台程序模式的切换 1 首先了解前台后台命令 2 前后台的切换 1 kill 命令 2 进程前后台切换 三 runle
  • 第六章习题

    R1 个无线网络运行在 基础设施模式 下是什么含义 如果某网络没有运行在基础设施模式下 那么它运行在什么模式下 这种运行模式与基础设施模式之间有什么不同 在基础结构操作模式下 每个无线主机都通过基站连接到较大的网络 如果未在基础架构模式下运
  • 图灵携手全球机器学习技术大会,拥抱 AGI 变革时代

    备受行业关注的 2023 全球机器学习技术大会 ML Summit 将于10月20 21日在北京金茂威斯汀大饭店隆重举行 此次大会由 Boolan 和 CSDN 联合主办 秉承 全球专家 卓越智慧 的宗旨 特邀近 50 位人工智能与机器学习
  • 判断cuda是否安装成功

    进入环境中 输入以下命令 python import torch torch cuda is available 返回结果如下图
  • sklearn 中的线性回归、岭回归、Lasso回归参数配置及示例

    文章目录 线性回归 引入 重要参数 重要属性 重要方法 例子 岭回归 引入 重要参数 重要属性 重要方法 示例 Lasso 回归 引入 重要参数 重要属性 重要方法 示例 本文主要讲一些sklearn中回归模型的使用 如果需要了解相关理论
  • marquee的滚动属性参数

    null从
  • 泛型编程杂谈

    谈 泛型 GP 之前 先谈一下面向对象 OO OO强调世界是由对象组成的 对象是由方法和属性组成的 个人感觉还应该加上事件 而对象之间又有继承 is a 和组合等 关系 OO很符合我们认识世界的直觉 它以封装 继承和多态为特性 我们在现实工
  • 关于ESP8266自动下载和CH340的几件事

    最近在玩ESP8266 做了些东西 比如考研倒计时器 网络闹钟 网络灯 用手机控制亮度 气象站等等 ESP8266本身挺简单的 倒是这个自动下载电路 我还是第一次玩 以前玩51也用过串口下载 都是自己冷启动 玩STM32用的ST LINK
  • MobileNetV2-SSDLite的安装使用

    前两篇文章已经安装了caffe并切换到ssd分支 同时添加了对ReLU6的支持 接着这里开始安装和使用MobileNetV2 SSDLite 首先安装MobileNetV2 SSDLite git clone https github co
  • 虚拟机ubuntu18.04+opencv4.6.0安装一篇足矣!!【指路合集】【亲测有效】

    写在前面 下面的方法都是本人实测遇到问题时采用的学习到的方法 亲测有效 其他根据教程走没什么问题 希望能有所帮助 本篇分两部分 一部分是虚拟机ubuntu18 04的安装 完整详细教程写在另一篇中 亲测有效 VM虚拟机安装Ubantu18
  • 关于标签的 的target属性

    如果 有一个页面上为这样两个超链接 a href http www baidu com 超链接1 a a href http www sohu com target self 超链接2 a 点击超链接1 的时候会弹出一个页签 内容是 htt
  • 卷积神经网络应用之图像分割

    SPP结构主要学自该博客 深度学习 十九 基于空间金字塔池化的卷积神经网络物体检测 FNC FNC主要做的是基于像素的图像分割预测 其做法是先按照传统的CNN结构得到feature map 将传统的全连接层替换成相应的卷积层 如最后一层特征
  • JSON与文件互转

    JSON转文件 createJsonFile package util import java io File import java io FileOutputStream import java io OutputStreamWrite