diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 000000000..f0d9515f5
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,83 @@
+name: Bug Report/报告 bug
+description: "Create a report to help us improve, please read FAQ first./帮助我们更好地改进项目,但请先阅读常见问题与提问前必看,不要提已有的重复问题!"
+title: "[Bug] "
+labels: [kind/bug]
+body:
+- type: markdown
+ attributes:
+ value: "如果你已经知道问题所在、怎么解决,请直接 提交 Pull Request 为社区做贡献,非常感谢。\n开发者也是人,也需要工作、休息、恋爱、陪伴家人、走亲会友等,也有心情不好和身体病痛,\n往往没有额外的时间精力顾及一些小问题,请理解和支持,开源要大家参与贡献才会更美好~\n少数个人的热情终有被耗尽的一天,只有大家共同建设和繁荣社区,才能让开源可持续发展! "
+
+- type: input
+ attributes:
+ label: APIJSON Version/APIJSON 版本号
+ placeholder: |
+ e.g./例如 5.4.0 ,如果不是最新版请用最新版,复现问题再来,原则上不更新旧版,而是只维护一个最新版
+
+ validations:
+ required: true
+
+- type: input
+ attributes:
+ label: Database Type & Version/数据库类型及版本号
+ placeholder: |
+ e.g./例如 MySQL 5.7.34
+
+ validations:
+ required: true
+
+- type: textarea
+ attributes:
+ label: Environment/环境信息
+ description: |
+ e.g./例如:
+ - **JDK/基础库**: 1.8.0_17
+ - **OS/系统**: MacOS Monterey 12.6 (21G115) M1
+ value: |
+ - JDK/基础库:
+ - OS/系统:
+ render: markdown
+
+ validations:
+ required: true
+
+- type: input
+ attributes:
+ label: APIAuto Screenshots/APIAuto 请求与结果完整截屏
+ description: "Upload by copy and paste image file or url./复制图片文件或 URL 再粘贴到输入框(用 APIAuto 能静态检查出很多问题,甚至还有修复建议,不用浪费你我的时间)\n https://github.com/TommyLemon/APIAuto "
+ value:
+
+ validations:
+ required: true
+
+- type: textarea
+ attributes:
+ label: Current Behavior/问题描述
+ description: "A concise description of what you're experiencing. Must contains screenshots./\n\n**提 bug 请发请求和响应的【完整截屏】,没图的自行解决!\n开发者有限的时间和精力主要放在【维护项目源码和文档】上!\n【描述不详细】 或 【文档/常见问题 已有答案】 的问题可能会被忽略!!\n【态度 不文明/不友善】的可能会被拉黑,问题也可能不予解答!!!**\n\n请求参数 JSON 中表名、字段名、关键词及对应的值都是大小写敏感、逗号敏感、分号敏感、空格敏感、换行敏感,\n大部分情况都不允许空格和换行,表名以大写字母开头,不要想当然,请严格按照 设计规范 来调用 API \n https://github.com/Tencent/APIJSON/issues/181 "
+ render: markdown
+
+ validations:
+ required: true
+
+- type: textarea
+ attributes:
+ label: Expected Behavior/期望结果
+ description: A concise description of what you expected to happen./具体描述你期望返回什么样的结果或者达到什么样的效果?
+ render: markdown
+
+ validations:
+ required: false
+
+
+- type: textarea
+ attributes:
+ label: Any additional comments?/其它补充说明?
+ description: |
+ e.g. some background/context of how you ran into this bug./例如:一些背景或上下文信息,包括复现步骤、相关日志等
+ render: markdown
+
+ validations:
+ required: false
+
+- type: markdown
+ attributes:
+ value: "Please follow the rules to fulfil all required inputs. You can add screenshots by comment after submit this issue./\n请按要求填写所有必填项,未填完将提交不了!\n如果随意填写敷衍了事,将直接关闭 issue,问题不会得到解答!\n可以提交后再通过回复评论来补充上传截屏图片(复制粘贴文件)。\n如果是网页 bug 等与你无关的原因导致提交不了,可以改为填问卷:\n https://wj.qq.com/s2/10971431/2a09 "
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 000000000..3ba13e0ce
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1 @@
+blank_issues_enabled: false
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 000000000..6f14d47b3
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,17 @@
+name: Feature Request/期望新增功能
+description: Request a new feature/期望新增什么样的功能或特性,或者做哪些方面的改进?
+title: "[Feature] "
+labels: [kind/feature]
+body:
+- type: textarea
+ attributes:
+ label: Description
+ description: |
+ Please describe what this feature does./具体描述下是什么样的功能或特性,以及你为什么想要它,用在什么场景,碰到了什么痛点,有什么解决思路,尝试过哪些,效果怎样?
+
+ validations:
+ required: true
+
+- type: markdown
+ attributes:
+ value: 推荐去建议收集箱提问,也方便 统一检索和管理、投票决定优先级、更新处理进度 等: https://github.com/Tencent/APIJSON/issues/37
diff --git a/.github/ISSUE_TEMPLATE/other_issues.yml b/.github/ISSUE_TEMPLATE/other_issues.yml
new file mode 100644
index 000000000..9f9a6d0ea
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/other_issues.yml
@@ -0,0 +1,16 @@
+name: Other Issues/其它反馈
+description: For questions, suggestions, improvements and others./问题(非 bug)、建议(非新增功能) 或 其它
+title: "[xxx] "
+body:
+- type: textarea
+ attributes:
+ label: Description
+ description: |
+ Please describe the issue./请具体描述,包括是什么、为什么、如何做
+
+ validations:
+ required: true
+
+- type: markdown
+ attributes:
+ value: "Bug 反馈请使用正确的模板,用错模板将直接关闭 issue,不予解答:\n https://github.com/Tencent/APIJSON/issues/new?assignees=&labels=kind%2Fbug&template=bug_report.yml&title=%5BBug%5D+ \n有建议请去建议收集箱提问,也方便 统一检索和管理、投票决定优先级、更新处理进度 等:\n https://github.com/Tencent/APIJSON/issues/37 "
diff --git a/.gitignore b/.gitignore
index 8670619e9..a06bbd0a8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,19 +1,38 @@
.DS_Store
-APIJSON-Android/APIJSON-ADT/APIJSONApp/APIJSONApp/bin
-APIJSON-Android/APIJSON-ADT/APIJSONApp/APIJSONApp/gen
-APIJSON-Android/APIJSON-ADT/APIJSONApp/QRCodeLibrary/bin
-APIJSON-Android/APIJSON-ADT/APIJSONApp/QRCodeLibrary/gen
-APIJSON-Android/APIJSON-ADT/APIJSONApp/ZBLibrary/bin
-APIJSON-Android/APIJSON-ADT/APIJSONApp/ZBLibrary/gen
-APIJSON-Android/APIJSON-ADT/APIJSONLibrary/bin
-APIJSON-Android/APIJSON-ADT/APIJSONLibrary/gen
-APIJSON-Android/APIJSON-ADT/APIJSONTest/bin
-APIJSON-Android/APIJSON-ADT/APIJSONTest/gen
-APIJSON-Android/APIJSON-AndroidStudio/APIJSONApp/.idea
-APIJSON-JavaScript/.idea
-
-APIJSON-JavaScript/APIJSON-JS-Vue/yarn.lock
-APIJSON-Java-Server/APIJSONDemo/.settings
-APIJSON-Java-Server/APIJSONLibrary/.settings
-*.classpath
+.gradle
+yarn.lock
*.project
+
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**
+!**/src/test/**
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+
+### VS Code ###
+.vscode/
+APIJSONORM/bin
+*.DS_Store
diff --git a/APIJSON-Android/APIJSONApp/.gitignore b/APIJSON-Android/APIJSONApp/.gitignore
deleted file mode 100644
index c88a4b635..000000000
--- a/APIJSON-Android/APIJSONApp/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-*.iml
-.gradle
-/local.properties
-.idea
-.DS_Store
-/build
-/captures
diff --git a/APIJSON-Android/APIJSONApp/APIJSONLibrary/.gitignore b/APIJSON-Android/APIJSONApp/APIJSONLibrary/.gitignore
deleted file mode 100644
index 796b96d1c..000000000
--- a/APIJSON-Android/APIJSONApp/APIJSONLibrary/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
diff --git a/APIJSON-Android/APIJSONApp/APIJSONLibrary/build.gradle b/APIJSON-Android/APIJSONApp/APIJSONLibrary/build.gradle
deleted file mode 100644
index 6f78ee4c7..000000000
--- a/APIJSON-Android/APIJSONApp/APIJSONLibrary/build.gradle
+++ /dev/null
@@ -1,26 +0,0 @@
-apply plugin: 'com.android.library'
-
-android {
- compileSdkVersion 23
- buildToolsVersion '23.0.2'
- defaultConfig {
- minSdkVersion 15
- targetSdkVersion 22
- versionCode 1
- versionName "1.0"
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
- productFlavors {
- }
-}
-
-dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- testCompile 'junit:junit:4.12'
- compile files('libs/fastjson-1.2.24.jar')
-}
diff --git a/APIJSON-Android/APIJSONApp/APIJSONLibrary/libs/fastjson-1.2.24.jar b/APIJSON-Android/APIJSONApp/APIJSONLibrary/libs/fastjson-1.2.24.jar
deleted file mode 100644
index 4a6652fb5..000000000
Binary files a/APIJSON-Android/APIJSONApp/APIJSONLibrary/libs/fastjson-1.2.24.jar and /dev/null differ
diff --git a/APIJSON-Android/APIJSONApp/APIJSONLibrary/proguard-rules.pro b/APIJSON-Android/APIJSONApp/APIJSONLibrary/proguard-rules.pro
deleted file mode 100644
index 90cb5eb39..000000000
--- a/APIJSON-Android/APIJSONApp/APIJSONLibrary/proguard-rules.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in /Users/Tommy/Library/Android/sdk/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
diff --git a/APIJSON-Android/APIJSONApp/APIJSONLibrary/src/androidTest/java/zuo/biao/apijson/client/ApplicationTest.java b/APIJSON-Android/APIJSONApp/APIJSONLibrary/src/androidTest/java/zuo/biao/apijson/client/ApplicationTest.java
deleted file mode 100644
index e44a51bfd..000000000
--- a/APIJSON-Android/APIJSONApp/APIJSONLibrary/src/androidTest/java/zuo/biao/apijson/client/ApplicationTest.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package zuo.biao.apijson.client;
-
-import android.app.Application;
-import android.test.ApplicationTestCase;
-
-/**
- * Testing Fundamentals
- */
-public class ApplicationTest extends ApplicationTestCase {
- public ApplicationTest() {
- super(Application.class);
- }
-}
\ No newline at end of file
diff --git a/APIJSON-Android/APIJSONApp/APIJSONLibrary/src/main/AndroidManifest.xml b/APIJSON-Android/APIJSONApp/APIJSONLibrary/src/main/AndroidManifest.xml
deleted file mode 100644
index 93e2d0fcb..000000000
--- a/APIJSON-Android/APIJSONApp/APIJSONLibrary/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/APIJSON-Android/APIJSONApp/APIJSONLibrary/src/main/java/zuo/biao/apijson/JSON.java b/APIJSON-Android/APIJSONApp/APIJSONLibrary/src/main/java/zuo/biao/apijson/JSON.java
deleted file mode 100644
index 7bd24b97d..000000000
--- a/APIJSON-Android/APIJSONApp/APIJSONLibrary/src/main/java/zuo/biao/apijson/JSON.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*Copyright ©2016 TommyLemon(https://github.com/TommyLemon/APIJSON)
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.*/
-
-package zuo.biao.apijson;
-
-import java.util.List;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.parser.Feature;
-import com.alibaba.fastjson.serializer.SerializerFeature;
-
-/**阿里FastJSON封装类 防止解析时异常
- * @author Lemon
- */
-public class JSON {
- private static final String TAG = "JSON";
-
- /**判断json格式是否正确
- * @param s
- * @return
- */
- public static boolean isJsonCorrect(String s) {
- //太长 Log.i(TAG, "isJsonCorrect <<<< " + s + " >>>>>>>");
- if (s == null
- // || s.equals("[]")
- // || s.equals("{}")
- || s.equals("")
- || s.equals("[null]")
- || s.equals("{null}")
- || s.equals("null")) {
- return false;
- }
- return true;
- }
-
- /**获取有效的json
- * @param s
- * @return
- */
- public static String getCorrectJson(String s) {
- return getCorrectJson(s, false);
- }
- /**获取有效的json
- * @param s
- * @param isArray
- * @return
- */
- public static String getCorrectJson(String s, boolean isArray) {
- s = StringUtil.getTrimedString(s);
- // if (isArray) {
- // while (s.startsWith("\"")) {
- // s = s.substring(1);
- // }
- // while (s.endsWith("\"")) {
- // s = s.substring(0, s.length() - 1);
- // }
- // }
- return s;//isJsonCorrect(s) ? s : null;
- }
-
- /**obj转JSONObject
- * @param json
- * @return
- */
- public static JSONObject parseObject(Object obj) {
- if (obj instanceof JSONObject) {
- return (JSONObject) obj;
- }
- return parseObject(toJSONString(obj));
- }
- /**json转JSONObject
- * @param json
- * @return
- */
- public static JSONObject parseObject(String json) {
- int features = com.alibaba.fastjson.JSON.DEFAULT_PARSER_FEATURE;
- features |= Feature.OrderedField.getMask();
- return parseObject(json, features);
- }
- /**json转JSONObject
- * @param json
- * @param features
- * @return
- */
- public static JSONObject parseObject(String json, int features) {
- try {
- return com.alibaba.fastjson.JSON.parseObject(getCorrectJson(json), JSONObject.class, features);
- } catch (Exception e) {
- Log.i(TAG, "parseObject catch \n" + e.getMessage());
- }
- return null;
- }
-
- /**JSONObject转实体类
- * @param object
- * @param clazz
- * @return
- */
- public static T parseObject(JSONObject object, Class clazz) {
- return parseObject(toJSONString(object), clazz);
- }
- /**json转实体类
- * @param json
- * @param clazz
- * @return
- */
- public static T parseObject(String json, Class clazz) {
- if (clazz == null) {
- Log.e(TAG, "parseObject clazz == null >> return null;");
- } else {
- try {
- int features = com.alibaba.fastjson.JSON.DEFAULT_PARSER_FEATURE;
- features |= Feature.OrderedField.getMask();
- return com.alibaba.fastjson.JSON.parseObject(getCorrectJson(json), clazz, features);
- } catch (Exception e) {
- Log.i(TAG, "parseObject catch \n" + e.getMessage());
- }
- }
- return null;
- }
-
- /**list转JSONArray
- * @param list
- * @return
- */
- public static JSONArray parseArray(List