最近遇到了業務需求,java對象轉換爲json文件,json文件轉換爲java對象。這個需求能夠拆分爲:java
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>
三個 lombok 註解必須加,若是未使用 lombok,請在此實體類加 setter & getter,全參構造方法,無參構造方法。maven
@Data @AllArgsConstructor @NoArgsConstructor public class Person { private Integer id; private String name; private Integer age; }
/** * 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()); }
/** * 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"); } }
@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文件(可以使用vim查看):spa
讀取 json 文件轉換爲 java對象 成功:code