我的目标是创建一个类来表示java中类别的层次结构模式。现在从数据库中我得到了我需要构建的路径,如下所示;
" 123_456_789" " 123_67" " 895_444"
获得上述2个字符串作为输入。我的目标是将上述数据转换为以下结构
categories[
{
categoryId:123,
subcategories[{
categoryId:456,
subcategories[{
categoryId:789
}]
},
{
categoryId:67
}
]
},
{
categoryId:895,
subcategories[{
categoryId:444
}]
}]
将输入转换为类似带有listIds列表的类的java对象的最简单方法是什么。
答案 0 :(得分:0)
首先需要将其存储在树型数据结构中,然后像json pretty print一样打印。
你需要在classpath中使用gson jar,你可以在 gson.jar
找到它以下是您提出的问题的工作代码:
import java.util.*;
import java.util.Map.Entry;
import com.google.gson.*;
public class MainTest {
public static void main(String[] args) {
String arr[] = new String[] { "123_456_789", "123_67", "895_444" };
Node node = new Node(null, arr);
// System.out.println(node);
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(node.toString());
String prettyJsonString = gson.toJson(je);
System.out.println(prettyJsonString.replaceAll("\"", ""));
}
static class Node {
String value;
List<Node> list;
public Node(String value, String arr[]) {
this.value = value;
list = new ArrayList<Node>();
if (arr != null && arr.length > 0) {
Map<String, List<String>> map = new LinkedHashMap<String, List<String>>();
for (String str : arr) {
int _ = str.indexOf("_");
if (_ > 0) {
String key = str.substring(0, _);
String currentValue = str.substring(_ + 1);
List<String> list = map.get(key);
if (list == null) {
list = new ArrayList<String>();
}
list.add(currentValue);
map.put(key, list);
} else {
map.put(str, null);
}
}
for (Entry<String, List<String>> entry : map.entrySet()) {
if (entry.getValue() == null) {
list.add(new Node(entry.getKey(), null));
} else {
list.add(new Node(entry.getKey(), entry.getValue()
.toArray(new String[entry.getValue().size()])));
}
}
}
}
@Override
public String toString() {
if (this.value == null) {
StringBuilder sb = new StringBuilder();
sb.append("{\"categories\":[" + "\n");
Iterator<Node> iter = list.iterator();
while (iter.hasNext()) {
sb.append(iter.next());
if (iter.hasNext()) {
sb.append(",");
}
}
sb.append("]}");
return sb.toString();
} else {
StringBuilder sb = new StringBuilder();
Iterator<Node> iter = list.iterator();
sb.append("{\"categoryId\":" + value + "}"
+ (iter.hasNext() ? "," : "") + "\n");
if (iter.hasNext()) {
sb.append("{\"subcategories\":[" + "\n");
while (iter.hasNext()) {
// sb.append("{");
sb.append(iter.next());
// sb.append("}");
if (iter.hasNext()) {
sb.append(",");
}
}
sb.append("]}" + "\n");
}
return sb.toString();
}
}
}
}