json 文件讀寫(java對象和json文件互相轉換)

前言

最近遇到了業務需求,java對象轉換爲json文件,json文件轉換爲java對象。這個需求能夠拆分爲:java

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

json 序列化反序列化咱們使用 alibaba 的 fastjson,很好用。json

直接看demo代碼吧。vim

依賴

<!-- 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,全參構造方法,無參構造方法。maven

@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 文件成功:測試

Screen Shot 2020-11-12 at 9.42.56 AM

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

Screen Shot 2020-11-12 at 9.43.26 AM

讀取 json 文件轉換爲 java對象 成功:code

Screen Shot 2020-11-12 at 9.43.09 AM

相關文章
相關標籤/搜索