json 文件读写(java对象和json文件互相转换)

云英
• 阅读 7638

前言

最近遇到了业务需求,java对象转换为json文件,json文件转换为java对象。这个需求可以拆分为:

  1. json 序列化反序列化
  2. java IO

json 序列化反序列化我们使用 alibaba 的 fastjson,很好用。

直接看demo代码吧。

依赖

<!-- fastjson https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.56</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>

代码

实体类 Person(使用了lombok依赖)

三个 lombok 注解必须加,如果未使用 lombok,请在此实体类加 setter & getter,全参构造方法,无参构造方法。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    private Integer id;
    private String name;
    private Integer age;
}

object2JsonFile

/**
 * Object 转换为 json 文件
 *
 * @param finalPath finalPath 是绝对路径 + 文件名,请确保欲生成的文件所在目录已创建好
 * @param object 需要被转换的 Object
 */
public static void object2JsonFile(String finalPath, Object object) {
    JSONObject jsonObject = (JSONObject) JSON.toJSON(object);

    try {
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(finalPath), StandardCharsets.UTF_8);
        osw.write(jsonObject.toJSONString());
        osw.flush();
        osw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println(jsonObject.toJSONString());
}

jsonFile2Object

/**
 * json 文件转换为 Object
 *
 * @param finalPath finalPath 是绝对路径 + 文件名,请确保欲生成的文件所在目录已创建好
 * @param targetClass 需要被转换的 json 对应的目标类
 * @param <T> 需要被转换的 json 对应的目标类
 * @return 解析后的 Object
 */
public static <T> T jsonFile2Object(String finalPath, Class<T> targetClass) {
    String jsonString;
    File file = new File(finalPath);
    try {
        FileInputStream inputStream = new FileInputStream(file);
        int size = inputStream.available();
        byte[] buffer = new byte[size];
        inputStream.read(buffer);
        inputStream.close();
        jsonString = new String(buffer, StandardCharsets.UTF_8);
        T object = JSON.parseObject(jsonString, targetClass);
        return object;
    } catch (IOException e) {
        e.printStackTrace();
        throw new RuntimeException("IO exception");
    }
}

测试类的方法(maven项目结构中的测试类)

@Test
void object2JsonFile() {
    Person person = new Person(22, "王多鱼", 19);
    String finalPath = "/Users/qianshijie/Temporary/skycomm/devsyn/test.json";
    JsonUtil.object2JsonFile(finalPath, person);
}

@Test
void jsonFile2Object() {
    String finalPath = "/Users/qianshijie/Temporary/skycomm/devsyn/test.json";
    Person person = JsonUtil.jsonFile2Object(finalPath, Person.class);
    System.out.println(person.toString());
}

运行结果

根据 java 对象生成 json 文件成功:

json 文件读写(java对象和json文件互相转换)

生成的json文件(可使用vim查看):

json 文件读写(java对象和json文件互相转换)

读取 json 文件转换为 java对象 成功:

json 文件读写(java对象和json文件互相转换)

点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Wesley13 Wesley13
4年前
java中的序列化
一、什么是java序列化  序列化:将对象写入IO流反序列化:从IO流中恢复对象序列化机制允许将实现序列化的java对象转换为字节序列,这些字节序列可以保存在磁盘上也可以通过网络传输,字节序列也可以再恢复为原来的对象。序列化机制可以让对象不依附于程序独立存在。二、应用场景
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
4年前
FastJson、Jackson、Gson进行Java对象转换Json的细节处理
Java对象转换Json的细节处理前言Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式一、fastJson1、fastJson在转换java对象为json的时候,默认是不序列化nu
Stella981 Stella981
4年前
Gson
Java对象和Json之间的互转,一般用的比较多的两个类库是Jackson和Gson,下面记录一下Gson的学习使用。基础概念: Serialization:序列化,使Java对象到Json字符串的过程。 Deserialization:反序列化,字符串转换成Java对象使用Maven管理Gson,pom.xml导入gson的依赖
Stella981 Stella981
4年前
Newtonsoft.Json Deserialize Type 或者 同类型 变量 反序列化
Newtonsoft.Json经常再用这样的需求还是很少用场景方法一:根据Type反序列化intdemo0;stringjsongStringJsonConvert.SerializeObject(demo);intjsonDemoJsonConvert.DeserializeObjec
Stella981 Stella981
4年前
Ajax和SpringMVC之间JSON交互
Ajax和SpringMVC之间的json数据传输有两种方式:1.直接传输Json对象2.将Json序列化成json字符串1.直接传输Json对象前端Ajax$(document).ready(function(){$("btn_login").click(function(){
Wesley13 Wesley13
4年前
Java操作JSON数据(2)
Gson是Google公司发布的一个开发源码的Java库,可用于将Java对象转换为JSON字符串,也可用于将JSON字符串转换为对应的Java对象。本介绍下Gson的基本使用方法,包括序列化和反序列化;文中所使用到的软件版本:Java1.8.0\_191、Gson2.8.6。1、引入依赖<dependency
Stella981 Stella981
4年前
FastJson 反序列化注意事项
问题描述使用fastJson对json字符串进行反序列化时,有几个点需要注意一下:反序列化内部类反序列化模板类0\.Getter/Setter问题如我们希望返回的一个json串为"name":"name","isDeleted":true,"isEmpty":1
Wesley13 Wesley13
4年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ
云英
云英
Lv1
春蚕到死丝方尽,蜡炬成灰泪始干。
文章
4
粉丝
0
获赞
0