Skip to content

Commit 6c7c08f

Browse files
committed
添加Properties互转Yaml功能。
1 parent e306439 commit 6c7c08f

10 files changed

Lines changed: 400 additions & 24 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,9 @@ Mac OS X x64 [xJavaFxTool-0.1.6-macosx-x64.pkg](https://dev.tencent.com/s/c5ffd1
105105

106106
31、ScriptEngineTool:脚本引擎调试工具(目前支持JavaScript、Groovy、Python、Lua等脚本);
107107

108-
32、FileRenameTool:文件重命名工具(未完善)
108+
32、FileRenameTool:文件重命名工具;
109109

110-
33、JsonConvertTool:Json转换工具(目前支持Json转Xml、Json转Java实体类、Json转C#实体类、Json转Excel、Json转Yaml);
110+
33、JsonConvertTool:Json转换工具(目前支持Json转Xml、Json转Java实体类、Json转C#实体类、Json转Excel、Json转Yaml、Properties转Yaml、Yaml转Properties);
111111

112112
34、WechatJumpGameTool:微信跳一跳助手;
113113

src/main/java/com/xwintop/xJavaFxTool/controller/developTools/JsonConvertToolController.java

Lines changed: 70 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.xwintop.xJavaFxTool.services.developTools.JsonConvertToolService;
44
import com.xwintop.xJavaFxTool.view.developTools.JsonConvertToolView;
5+
import com.xwintop.xcore.util.javafx.TooltipUtil;
56
import javafx.event.ActionEvent;
67
import javafx.fxml.FXML;
78
import lombok.Getter;
@@ -10,6 +11,7 @@
1011

1112
import java.net.URL;
1213
import java.util.ResourceBundle;
14+
1315
/**
1416
* @ClassName: JsonConvertToolController
1517
* @Description: Json转换工具
@@ -41,41 +43,101 @@ private void initService() {
4143

4244
@FXML
4345
private void jsonToXmlAction(ActionEvent event) throws Exception {
44-
jsonConvertToolService.jsonToXmlAction();
46+
try {
47+
jsonConvertToolService.jsonToXmlAction();
48+
} catch (Exception e) {
49+
log.error("转换错误:", e);
50+
TooltipUtil.showToast("转换错误" + e.getMessage());
51+
}
4552
}
4653

4754
@FXML
4855
private void xmlToJsonAction(ActionEvent event) throws Exception {
49-
jsonConvertToolService.xmlToJsonAction();
56+
try {
57+
jsonConvertToolService.xmlToJsonAction();
58+
} catch (Exception e) {
59+
log.error("转换错误:", e);
60+
TooltipUtil.showToast("转换错误" + e.getMessage());
61+
}
5062
}
5163

5264
@FXML
5365
private void jsonToJavaBeanAction(ActionEvent event) throws Exception {
54-
jsonConvertToolService.jsonToJavaBeanAction();
66+
try {
67+
jsonConvertToolService.jsonToJavaBeanAction();
68+
} catch (Exception e) {
69+
log.error("转换错误:", e);
70+
TooltipUtil.showToast("转换错误" + e.getMessage());
71+
}
5572
}
5673

5774
@FXML
5875
private void jsonToCAction(ActionEvent event) throws Exception {
59-
jsonConvertToolService.jsonToCAction();
76+
try {
77+
jsonConvertToolService.jsonToCAction();
78+
} catch (Exception e) {
79+
log.error("转换错误:", e);
80+
TooltipUtil.showToast("转换错误" + e.getMessage());
81+
}
6082
}
6183

6284
@FXML
6385
private void excelToJsonAction(ActionEvent event) throws Exception {
64-
jsonConvertToolService.excelToJsonAction();
86+
try {
87+
jsonConvertToolService.excelToJsonAction();
88+
} catch (Exception e) {
89+
log.error("转换错误:", e);
90+
TooltipUtil.showToast("转换错误" + e.getMessage());
91+
}
6592
}
6693

6794
@FXML
6895
private void jsonToExcelAction(ActionEvent event) throws Exception {
69-
jsonConvertToolService.jsonToExcelAction();
96+
try {
97+
jsonConvertToolService.jsonToExcelAction();
98+
} catch (Exception e) {
99+
log.error("转换错误:", e);
100+
TooltipUtil.showToast("转换错误" + e.getMessage());
101+
}
70102
}
71103

72104
@FXML
73105
private void jsonToYamlAction(ActionEvent event) throws Exception {
74-
jsonConvertToolService.jsonToYamlAction();
106+
try {
107+
jsonConvertToolService.jsonToYamlAction();
108+
} catch (Exception e) {
109+
log.error("转换错误:", e);
110+
TooltipUtil.showToast("转换错误" + e.getMessage());
111+
}
75112
}
76113

77114
@FXML
78115
private void yamlToJsonAction(ActionEvent event) throws Exception {
79-
jsonConvertToolService.yamlToJsonAction();
116+
try {
117+
jsonConvertToolService.yamlToJsonAction();
118+
} catch (Exception e) {
119+
log.error("转换错误:", e);
120+
TooltipUtil.showToast("转换错误" + e.getMessage());
121+
}
122+
}
123+
124+
@FXML
125+
private void propsToYamlAction(ActionEvent event) throws Exception {
126+
try {
127+
jsonConvertToolService.propsToYamlAction();
128+
} catch (Exception e) {
129+
log.error("转换错误:", e);
130+
TooltipUtil.showToast("转换错误" + e.getMessage());
131+
}
132+
}
133+
134+
@FXML
135+
private void yamlToPropsAction(ActionEvent event) throws Exception {
136+
try {
137+
jsonConvertToolService.yamlToPropsAction();
138+
} catch (Exception e) {
139+
log.error("转换错误:", e);
140+
TooltipUtil.showToast("转换错误" + e.getMessage());
141+
}
80142
}
81143
}

src/main/java/com/xwintop/xJavaFxTool/services/developTools/JsonConvertToolService.java

Lines changed: 58 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import com.alibaba.fastjson.JSONArray;
55
import com.alibaba.fastjson.JSONObject;
66
import com.xwintop.xJavaFxTool.controller.developTools.JsonConvertToolController;
7+
import com.xwintop.xJavaFxTool.services.developTools.JsonConvertToolServiceUtil.ArrayProcessor;
8+
import com.xwintop.xJavaFxTool.services.developTools.JsonConvertToolServiceUtil.PropertyTree;
9+
import com.xwintop.xJavaFxTool.services.developTools.JsonConvertToolServiceUtil.TreeBuilder;
710
import com.xwintop.xcore.util.StrUtil;
811
import com.xwintop.xcore.util.XML2BeanUtils;
912
import lombok.Getter;
@@ -14,10 +17,10 @@
1417
import org.dom4j.io.SAXReader;
1518
import org.yaml.snakeyaml.Yaml;
1619

20+
import java.io.StringReader;
1721
import java.math.BigDecimal;
18-
import java.util.HashMap;
19-
import java.util.List;
20-
import java.util.Map;
22+
import java.util.*;
23+
2124
/**
2225
* @ClassName: JsonConvertToolService
2326
* @Description: Json转换工具
@@ -61,7 +64,7 @@ private String jsonToJavaBean(String beanName, Object jsonObject) {
6164
StringBuilder importString = new StringBuilder("package ;");
6265
StringBuilder propertyString = new StringBuilder();
6366
StringBuilder getSetString = new StringBuilder();
64-
Map<String,String> subclass = new HashMap<String, String>();
67+
Map<String, String> subclass = new HashMap<String, String>();
6568
for (Map.Entry<String, Object> entry : ((JSONObject) jsonObject).entrySet()) {
6669
Object value = entry.getValue();
6770
String key = entry.getKey();
@@ -84,21 +87,21 @@ private String jsonToJavaBean(String beanName, Object jsonObject) {
8487
getSetString.append("\n\tpublic void set" + keyName + "(List<" + keyName + "> " + key + "){\n\t\tthis." + key + " = " + key + ";\n\t}");
8588
getSetString.append("\n\tpublic List<" + keyName + "> " + "get" + keyName + "(){\n\t\treturn this." + key + ";\n\t}");
8689
String subclassString = jsonToJavaBean(keyName, value);
87-
subclass.put(keyName,subclassString);
90+
subclass.put(keyName, subclassString);
8891
} else if (value instanceof Map) {
8992
propertyString.append("\n\tprivate " + keyName + " " + key + ";");
9093
String subclassString = jsonToJavaBean(keyName, value);
91-
subclass.put(keyName,subclassString);
94+
subclass.put(keyName, subclassString);
9295
getSetString.append("\n\tpublic void set" + keyName + "(" + keyName + " " + key + "){\n\t\tthis." + key + " = " + key + ";\n\t}");
9396
getSetString.append("\n\tpublic " + keyName + " get" + keyName + "(){\n\t\treturn this." + key + ";\n\t}");
9497
}
9598
}
9699
afterString.append(importString.toString());
97-
afterString.append("\npublic class "+beanName+"\n{");
100+
afterString.append("\npublic class " + beanName + "\n{");
98101
afterString.append(propertyString.toString());
99-
afterString.append("\n"+getSetString.toString());
102+
afterString.append("\n" + getSetString.toString());
100103
afterString.append("\n}");
101-
subclass.forEach((key,value)->{
104+
subclass.forEach((key, value) -> {
102105
afterString.append("\n\n=============================\n");
103106
afterString.append(value.toString());
104107
});
@@ -118,7 +121,7 @@ private String jsonToCBean(String beanName, Object jsonObject) {
118121
}
119122
StringBuilder afterString = new StringBuilder();
120123
StringBuilder propertyString = new StringBuilder();
121-
Map<String,String> subclass = new HashMap<String, String>();
124+
Map<String, String> subclass = new HashMap<String, String>();
122125
for (Map.Entry<String, Object> entry : ((JSONObject) jsonObject).entrySet()) {
123126
Object value = entry.getValue();
124127
String key = entry.getKey();
@@ -132,17 +135,17 @@ private String jsonToCBean(String beanName, Object jsonObject) {
132135
} else if (value instanceof List) {
133136
propertyString.append("\n\tpublic List<" + keyName + "> " + key + " {get; set;}");
134137
String subclassString = jsonToCBean(keyName, value);
135-
subclass.put(keyName,subclassString);
138+
subclass.put(keyName, subclassString);
136139
} else if (value instanceof Map) {
137140
propertyString.append("\n\tpublic " + keyName + " " + key + " {get; set;}");
138141
String subclassString = jsonToCBean(keyName, value);
139-
subclass.put(keyName,subclassString);
142+
subclass.put(keyName, subclassString);
140143
}
141144
}
142-
afterString.append("\npublic class "+beanName+"\n{");
145+
afterString.append("\npublic class " + beanName + "\n{");
143146
afterString.append(propertyString.toString());
144147
afterString.append("\n}");
145-
subclass.forEach((key,value)->{
148+
subclass.forEach((key, value) -> {
146149
afterString.append("\n\n=============================\n");
147150
afterString.append(value.toString());
148151
});
@@ -190,7 +193,48 @@ public void yamlToJsonAction() throws Exception {
190193
jsonConvertToolController.getJsonTextArea().setText(jsonString);
191194
}
192195

196+
public void propsToYamlAction() throws Exception {
197+
String jsonString = jsonConvertToolController.getJsonTextArea().getText();
198+
Properties properties = new Properties();
199+
properties.load(new StringReader(jsonString));
200+
PropertyTree tree = new TreeBuilder(properties, true).build();
201+
tree = new ArrayProcessor(tree).apply();
202+
jsonConvertToolController.getAfterTextArea().setText(tree.toYAML());
203+
}
204+
205+
public void yamlToPropsAction() throws Exception {
206+
String afterString = jsonConvertToolController.getAfterTextArea().getText();
207+
Yaml yaml = new Yaml();
208+
Map<String, Object> map = (Map<String, Object>) yaml.load(afterString);
209+
Properties properties = new Properties() {
210+
@Override
211+
public synchronized Enumeration<Object> keys() {
212+
return Collections.enumeration(new TreeSet<Object>(super.keySet()));
213+
}
214+
};
215+
iterateAndProcess(properties, map, "");
216+
StringBuffer stringBuffer = new StringBuffer();
217+
Iterator iterator = properties.keySet().iterator();
218+
while (iterator.hasNext()) {
219+
Object key = iterator.next();
220+
stringBuffer.append(key + "=" + properties.get(key) + "\n");
221+
}
222+
jsonConvertToolController.getJsonTextArea().setText(stringBuffer.toString());
223+
}
224+
193225
public JsonConvertToolService(JsonConvertToolController jsonConvertToolController) {
194226
this.jsonConvertToolController = jsonConvertToolController;
195227
}
228+
229+
private static void iterateAndProcess(Properties properties, Map<String, Object> ymlEntry, String rootKey) {
230+
for (String key : ymlEntry.keySet()) {
231+
Object value = ymlEntry.get(key);
232+
if (value instanceof Map) {
233+
iterateAndProcess(properties, (Map<String, Object>) value, StringUtils.isEmpty(rootKey) ? key : rootKey
234+
+ "." + key);
235+
} else {
236+
properties.setProperty(StringUtils.isEmpty(rootKey) ? key : rootKey + "." + key, value.toString());
237+
}
238+
}
239+
}
196240
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.xwintop.xJavaFxTool.services.developTools.JsonConvertToolServiceUtil;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
import java.util.regex.Matcher;
8+
import java.util.regex.Pattern;
9+
10+
public class ArrayProcessor {
11+
12+
private final static Pattern pattern = Pattern.compile("(.*)\\[(\\d+)\\]");
13+
14+
private final PropertyTree tree;
15+
16+
public ArrayProcessor(PropertyTree tree) {
17+
this.tree = tree;
18+
}
19+
20+
public PropertyTree apply() {
21+
return process(tree);
22+
}
23+
24+
private PropertyTree process(final PropertyTree root) {
25+
final PropertyTree result = new PropertyTree();
26+
final Map<String, List<Object>> entriesFromList = new HashMap<>();
27+
root.entrySet().stream().forEach((entry) -> {
28+
Matcher matcher = pattern.matcher(entry.getKey());
29+
if (matcher.find()) {
30+
String label = matcher.group(1);
31+
int index = Integer.parseInt(matcher.group(2));
32+
entriesFromList.put(label, processListElement(entriesFromList.get(label), entry.getValue(), index));
33+
} else {
34+
result.put(entry.getKey(), getValue(entry.getValue()));
35+
}
36+
});
37+
result.putAll(entriesFromList);
38+
return result;
39+
}
40+
41+
private List<Object> processListElement(final List<Object> elements, final Object value, final int index) {
42+
List<Object> result = elements == null ? new ArrayList<>() : new ArrayList<>(elements);
43+
adjustArray(index, result);
44+
result.add(index, getValue(value));
45+
return result;
46+
}
47+
48+
private Object getValue(final Object value) {
49+
return value instanceof PropertyTree ? process((PropertyTree) value) : value;
50+
}
51+
52+
private void adjustArray(final int index, List<Object> elementList) {
53+
if (elementList.size() < index) {
54+
for (int i = elementList.size(); i < index; i++) {
55+
elementList.add(i, null);
56+
}
57+
}
58+
}
59+
}

0 commit comments

Comments
 (0)