使用FastJson对Json文件进行解析和写入操作

一、需求:

  1. 对Json文件进行读取,转成对象。
  2. 将封装好的对象反写成Json文件进行保存。

二、添加依赖

  1. /app/libs下添加fastjson-1.2.78.jarjar文件放置位置
  2. app/build.gradle中添加依赖implementation files('libs/fastjson-1.2.78.jar'),然后sync gradle文件。

三、读写操作

1.根据Json文件字段构建bean对象
{
	"jobs":[
		{
			"task_name":"任务1",
			"cycle":1,
			"if_clean_back":1,
			"sub_task_num":2,
			"sub_task":[
				{
					"sub_task_name":"区域1",
					"site_num":2,
					"sub_cycle":1,
					"point_list":[
						{
							"floor":0,
							"site":1,
							"op_count":1,
							"op_list":[
								{
									"op_num":65291,
									"parm1":0
								}
							]
						}
					]
				}
			]
		}
	]
}

bean对象
以Root和Job类为例:

public class Root {

    public List<Job> jobs = new ArrayList<>();

    public Root() {
    }

    public List<Job> getJobs() {
        return jobs;
    }

    public void setJobs(List<Job> jobs) {
        this.jobs = jobs;
    }

    @Override
    public String toString() {
        return "Root{" +
                "jobsList=" + jobs +
                '}';
    }
}
@JSONType(orders = {"task_name","cycle","if_clean_back","sub_task_num","sub_task"})//"task_id",
public class Job {

//    public int task_id;               //任务ID,占位,无实际用途
    public String task_name;            //任务名称,只用于UI显示
    public int cycle;                   //任务循环次数
    public int if_clean_back;           //是否回扫,是:1;否:0;默认为是:1
    public int sub_task_num;            //子区域个数,
    public List<Sub_Task> sub_task;     //

    public Job() {
    }

    public Job(String task_name, int cycle, int if_clean_back, int sub_task_num, List<Sub_Task> sub_task) {
//        this.task_id = task_id;
        this.task_name = task_name;
        this.cycle = cycle;
        this.if_clean_back = if_clean_back;
        this.sub_task_num = sub_task_num;
        this.sub_task = sub_task;
    }
    
    public String getTask_name() {
        return task_name;
    }

    public void setTask_name(String task_name) {
        this.task_name = task_name;
    }

    public int getCycle() {
        return cycle;
    }

    public void setCycle(int cycle) {
        this.cycle = cycle;
    }

    public int getIf_clean_back() {
        return if_clean_back;
    }

    public void setIf_clean_back(int if_clean_back) {
        this.if_clean_back = if_clean_back;
    }

    public int getSub_task_num() {
        return sub_task_num;
    }

    public void setSub_task_num(int sub_task_num) {
        this.sub_task_num = sub_task_num;
    }

    public List<Sub_Task> getSub_task() {
        return sub_task;
    }

    public void setSub_task(List<Sub_Task> sub_task) {
        this.sub_task = sub_task;
    }

    @Override
    public String toString() {
        return "Job{" +
                ", task_name='" + task_name + '\'' +
                ", cycle=" + cycle +
                ", if_clean_back=" + if_clean_back +
                ", sub_task_num=" + sub_task_num +
                ", subTaskList=" + sub_task +
                '}';
    }
} 

此处bean对象中的变量要与Json文件中的字段名保持一致,对于数组字段,使用List变量与之对应。
@JSONType(orders = {"task_name","cycle","if_clean_back","sub_task_num","sub_task"})是设置FastJson读写操作时的字段顺序,如果不设置,默认是按照变量首字母顺序进行读写。
注意:所有变量都要添加set()/get()方法,否则无法自动解析。

读Json文件
	/**
     * 读取AgvSingleJobs.json文件,转成Root实体
     *
     * @param path Json文件路径
     * @return
     */
    public Root readJson(String path) {
        String jsonStr = FileIOUtil.readFile2String(path, "utf-8");//将文件转成字符串
        Log.d(TAG, "read json string = " + jsonStr);
        if (null == jsonStr || jsonStr.isEmpty()) {
            return null;
        }
        //将字符串转成对象
        return JSONObject.parseObject(jsonStr, Root.class);
    }

这里FileIOUtil类是自己封装的文件读写类。

写Json文件
	/**
     * 将Root类型实体写成Json文件
     *
     * @param rootBean Root实体
     * @param path     Json文件路径
     */
    public void writeJsonFile(Root rootBean, String path) {
        String jsonString = JsonUtils.convertObjectToJSON(rootBean);//job转string
        FileIOUtil.writeFileFromString(path, jsonString);
    }
public class JsonUtils {

    private static final SerializeConfig config;

    static {
        config = new SerializeConfig();
        config.put(java.util.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
        config.put(java.sql.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
    }

    private static final SerializerFeature[] features = {SerializerFeature.WriteMapNullValue, // 输出空置字段
            SerializerFeature.WriteNullListAsEmpty, // list字段如果为null,输出为[],而不是null
            SerializerFeature.WriteNullNumberAsZero, // 数值字段如果为null,输出为0,而不是null
            SerializerFeature.WriteNullBooleanAsFalse, // Boolean字段如果为null,输出为false,而不是null
            SerializerFeature.WriteNullStringAsEmpty, // 字符类型字段如果为null,输出为"",而不是null

            //开发环境调试使用,线上环境请取消,仅是格式化输出json设置,会输出太多无用空格
            SerializerFeature.PrettyFormat
    };


    /**
     * 实体类转换成Json
     * @param object
     * @return
     */
    public static String convertObjectToJSON(Object object) {
        return JSON.toJSONString(object, config, features);
    }
}

这样就完成了Json文件的解析和写入。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值