【发布时间】:2017-02-26 00:46:51
【问题描述】:
我想将树结构中的数据表示为 java 对象,然后我想将其转换为 JSON 对象。
借助stackoverflow条目:
Convert java arrayList of Parent/child relation into tree?
我有下面的主要功能和“对”列表包含一对:孩子和父母
ArrayList<Pair> list= new ArrayList<>();
list.add(new Pair("6", "4"));
list.add(new Pair("5", "4"));
list.add(new Pair("4", "3"));
list.add(new Pair("2", "3"));
list.add(new Pair("3", "null"));
Map<String, Node> o_map= new HashMap<>();
for (Pair l: list) {
Node parent = o_map.getOrDefault(l.getParentId(), new Node(l.getParentId()));
Node child = o_map.getOrDefault(l.getChildId(), new Node(l.getChildId()));
parent.children.add(child);
child.parent = parent;
o_map.put(parent.id, parent);
o_map.put(child.id, child);
}
Gson gs = new Gson();
System.out.println(gs.toJson(o_map));
}
但是此代码返回:
Exception in thread "main" java.lang.StackOverflowError
at java.io.StringWriter.write(StringWriter.java:112)
at com.google.gson.stream.JsonWriter.string(JsonWriter.java:576)
at com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:402)
at com.google.gson.stream.JsonWriter.beginArray(JsonWriter.java:287)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:95)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:61)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:112)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:239)
at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:968)
错误。
我不明白为什么它会返回这样的错误。 可能是什么原因? 非常感谢您。
【问题讨论】:
-
我需要做的是将 hashmap
> 转换为 json 对象。 -
你应该这样写吗
ArrayList<Pair> list= new ArrayList<Pair>(); -
我需要在 json 中有树形结构。为此,我需要将 hashmap 转换为 json。我尝试了另一种选择,将一对列表写入 json,但结果不是我想要的。
-
“结果不是我想要的” - 分享您正在寻找的结果会很有帮助。包括
Node的定义也会有所帮助,因为这就是您要序列化的内容。