共计 2270 个字符,预计需要花费 6 分钟才能阅读完成。
前言
最近遇到了业务需要,java 对象转换为 json 文件,json 文件转换为 java 对象。这个需要能够拆分为:
- json 序列化反序列化
- 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 文件(可应用 vim 查看):
读取 json 文件转换为 java 对象 胜利:
正文完