From 81cc583bb587ee807605a10d1640706125f3e44d Mon Sep 17 00:00:00 2001
From: LiuTBaby <2335319149@qq.com>
Date: Sun, 31 Jul 2022 14:58:59 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0json=E6=96=87=E4=BB=B6?=
=?UTF-8?q?=E8=AF=BB=E5=8F=96=E5=B7=A5=E5=85=B7=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
xiuzhen-common/pom.xml | 7 ++
.../common/utils/json/FileFactory.java | 19 +++
.../common/utils/json/FileWrapper.java | 43 +++++++
.../xiuzhen/common/utils/json/PropData.java | 34 ++++++
.../common/utils/json/PropDataUtil.java | 112 ++++++++++++++++++
.../xiuzhen/common/utils/json/test/Staff.java | 10 ++
.../common/utils/json/test/Student.java | 11 ++
.../common/utils/json/test/Teacher.java | 12 ++
.../src/main/resources/company/Staff.json | 1 +
.../src/main/resources/school/Student.json | 1 +
.../src/main/resources/school/Teacher.json | 1 +
11 files changed, 251 insertions(+)
create mode 100644 xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/FileFactory.java
create mode 100644 xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/FileWrapper.java
create mode 100644 xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/PropData.java
create mode 100644 xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/PropDataUtil.java
create mode 100644 xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/test/Staff.java
create mode 100644 xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/test/Student.java
create mode 100644 xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/test/Teacher.java
create mode 100644 xiuzhen-common/src/main/resources/company/Staff.json
create mode 100644 xiuzhen-common/src/main/resources/school/Student.json
create mode 100644 xiuzhen-common/src/main/resources/school/Teacher.json
diff --git a/xiuzhen-common/pom.xml b/xiuzhen-common/pom.xml
index 63a5dc7..9bc415d 100644
--- a/xiuzhen-common/pom.xml
+++ b/xiuzhen-common/pom.xml
@@ -33,6 +33,13 @@
compile
+
+
+ com.alibaba
+ fastjson
+ 2.0.7
+
+
com.far
diff --git a/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/FileFactory.java b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/FileFactory.java
new file mode 100644
index 0000000..b91c991
--- /dev/null
+++ b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/FileFactory.java
@@ -0,0 +1,19 @@
+package com.far.game.xiuzhen.common.utils.json;
+
+import java.util.Map;
+
+public class FileFactory {
+
+ private Map fileWrapperMap;
+
+ public FileFactory() {
+ }
+
+ public FileFactory(Map fileWrapperMap) {
+ this.fileWrapperMap = fileWrapperMap;
+ }
+
+ public FileWrapper getFileWrapper(String dirName) {
+ return fileWrapperMap.get(dirName);
+ }
+}
diff --git a/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/FileWrapper.java b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/FileWrapper.java
new file mode 100644
index 0000000..cfd9ed7
--- /dev/null
+++ b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/FileWrapper.java
@@ -0,0 +1,43 @@
+package com.far.game.xiuzhen.common.utils.json;
+
+import com.far.tools.interf.func.NewCallble;
+
+
+public class FileWrapper {
+
+ private PropData propData;
+
+ public FileWrapper() {}
+
+ public FileWrapper(PropData propData) {
+ this.propData = propData;
+ }
+
+ public PropData getPropData() {
+ return propData;
+ }
+
+ /**
+ * 指定json文件名,生成对应类
+ * @param fileName 类名
+ * @param newCallble 函数接口
+ * @return Java映射对象
+ */
+ public T getObj(String fileName, NewCallble newCallble) {
+ T module = newCallble.newCall();
+ cn.hutool.core.bean.BeanUtil.copyProperties(propData.getKeyMap().get(fileName), module);
+ return module;
+ }
+
+ /**
+ * 生成对应类,json文件名要求与类名保持一致
+ * @param newCallble 函数接口
+ * @return java映射对象
+ */
+ public T getObj(NewCallble newCallble) {
+ T module = newCallble.newCall();
+ String name = module.getClass().getTypeName();
+ cn.hutool.core.bean.BeanUtil.copyProperties(propData.getKeyMap().get(name.substring(name.lastIndexOf(".") + 1)+".json"), module);
+ return module;
+ }
+}
diff --git a/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/PropData.java b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/PropData.java
new file mode 100644
index 0000000..f3ae6a2
--- /dev/null
+++ b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/PropData.java
@@ -0,0 +1,34 @@
+package com.far.game.xiuzhen.common.utils.json;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.List;
+import java.util.Map;
+
+public class PropData {
+
+ private List keys;
+
+ private Map keyObj;
+
+ public PropData(List keys, Map keyObj) {
+ this.keys = keys;
+ this.keyObj = keyObj;
+ }
+
+ public List getKeys() {
+ return keys;
+ }
+
+ public void setKeys(List keys) {
+ this.keys = keys;
+ }
+
+ public Map getKeyMap() {
+ return keyObj;
+ }
+
+ public void setKeyObj(Map keyObj) {
+ this.keyObj = keyObj;
+ }
+}
diff --git a/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/PropDataUtil.java b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/PropDataUtil.java
new file mode 100644
index 0000000..2b8139f
--- /dev/null
+++ b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/PropDataUtil.java
@@ -0,0 +1,112 @@
+package com.far.game.xiuzhen.common.utils.json;
+
+import com.alibaba.fastjson.JSONObject;
+import com.far.game.xiuzhen.common.utils.json.test.Staff;
+import com.far.game.xiuzhen.common.utils.json.test.Student;
+import com.far.game.xiuzhen.common.utils.json.test.Teacher;
+
+import java.io.InputStream;
+import java.util.*;
+
+/**
+ * json文件-->JSONObject转换工具
+ */
+public class PropDataUtil {
+
+ public PropDataUtil(){}
+
+ /**
+ * 初始化单个目录
+ * @param dirName 目录名
+ * @return 文件包装器
+ */
+ public static FileWrapper init(String dirName) {
+ return new FileWrapper(PropDataUtil.TransformJsonPropData(dirName));
+ }
+
+ /**
+ * 初始化多个目录
+ * @param dirNames 多个目录
+ * @return 文件工厂对象
+ */
+ public static FileFactory init(String... dirNames) {
+ Map fileWrapperMap = new HashMap<>();
+ for (String dirName : dirNames) {
+ fileWrapperMap.put(dirName,new FileWrapper(PropDataUtil.TransformJsonPropData(dirName)));
+ }
+ return new FileFactory(fileWrapperMap);
+ }
+
+ /**
+ * 通过目录名,获取PropData对象
+ * @param dirName 目录名
+ * @return PropData,包含List keys,Map keyObj;
+ */
+ private static PropData TransformJsonPropData(String dirName){
+
+ if (dirName.isEmpty()) {
+ throw new RuntimeException("目录名为空~~~");
+ }
+ InputStream dir = Thread.currentThread().getContextClassLoader().getResourceAsStream(dirName);
+
+ if (dir == null) {
+ throw new RuntimeException(dirName + "下没有json文件");
+ }
+
+ List jsonFileNameList = new ArrayList<>();
+
+ try(Scanner scanner = new Scanner(dir)) {
+ while (scanner.hasNextLine()) {
+ jsonFileNameList.add(scanner.nextLine());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (jsonFileNameList.isEmpty()) {
+ throw new RuntimeException(dirName + "下没有json文件");
+ }
+
+ Map jsonObjectMap = new HashMap<>();
+
+ for (String jsonFileName : jsonFileNameList) {
+ InputStream jsonFile = Thread.currentThread().getContextClassLoader().getResourceAsStream(dirName +"/"+ jsonFileName);
+ if (jsonFile != null) {
+ try(Scanner scanner = new Scanner(jsonFile)) {
+ while (scanner.hasNextLine()) {
+ JSONObject jsonObject = JSONObject.parseObject(scanner.nextLine());
+ jsonObjectMap.put(jsonFileName,jsonObject);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+ return new PropData(jsonFileNameList, jsonObjectMap);
+ }
+
+
+ public static void main(String[] args) {
+
+ FileFactory fileFactory = PropDataUtil.init("school","company");
+
+ FileWrapper companyWrapper = fileFactory.getFileWrapper("company");
+ Staff staff = companyWrapper.getObj(Staff::new);
+ System.out.println(staff);
+
+ FileWrapper schoolWrapper = fileFactory.getFileWrapper("school");
+ Student student = schoolWrapper.getObj(Student::new);
+ System.out.println(student);
+
+ Teacher teacher = schoolWrapper.getObj(Teacher::new);
+ System.out.println(teacher);
+
+ System.out.println();
+ System.out.println();
+ PropData schoolPropData = schoolWrapper.getPropData();
+ System.out.println(schoolPropData.getKeys());
+ System.out.println(schoolPropData.getKeyMap());
+
+ }
+}
diff --git a/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/test/Staff.java b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/test/Staff.java
new file mode 100644
index 0000000..2a64549
--- /dev/null
+++ b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/test/Staff.java
@@ -0,0 +1,10 @@
+package com.far.game.xiuzhen.common.utils.json.test;
+
+import lombok.Data;
+
+@Data
+public class Staff {
+ private String name;
+
+ private String position;
+}
diff --git a/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/test/Student.java b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/test/Student.java
new file mode 100644
index 0000000..199595e
--- /dev/null
+++ b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/test/Student.java
@@ -0,0 +1,11 @@
+package com.far.game.xiuzhen.common.utils.json.test;
+
+import lombok.Data;
+
+@Data
+public class Student {
+ private String name;
+
+ private String age;
+
+}
diff --git a/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/test/Teacher.java b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/test/Teacher.java
new file mode 100644
index 0000000..2d1e4f3
--- /dev/null
+++ b/xiuzhen-common/src/main/java/com/far/game/xiuzhen/common/utils/json/test/Teacher.java
@@ -0,0 +1,12 @@
+package com.far.game.xiuzhen.common.utils.json.test;
+
+import lombok.Data;
+
+@Data
+public class Teacher {
+ private String name;
+
+ private String age;
+
+ private String phone;
+}
diff --git a/xiuzhen-common/src/main/resources/company/Staff.json b/xiuzhen-common/src/main/resources/company/Staff.json
new file mode 100644
index 0000000..8437d0f
--- /dev/null
+++ b/xiuzhen-common/src/main/resources/company/Staff.json
@@ -0,0 +1 @@
+{"name":"王五","position": "员工"}
diff --git a/xiuzhen-common/src/main/resources/school/Student.json b/xiuzhen-common/src/main/resources/school/Student.json
new file mode 100644
index 0000000..29c0cfa
--- /dev/null
+++ b/xiuzhen-common/src/main/resources/school/Student.json
@@ -0,0 +1 @@
+{"name":"lisi","age": 20}
diff --git a/xiuzhen-common/src/main/resources/school/Teacher.json b/xiuzhen-common/src/main/resources/school/Teacher.json
new file mode 100644
index 0000000..d5dd76f
--- /dev/null
+++ b/xiuzhen-common/src/main/resources/school/Teacher.json
@@ -0,0 +1 @@
+{"name":"zhangsan","age": 23,"phone": "15720984436"}
--
Gitee