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