[英]Write java class with nested Map to custom json format using Gson
什么Java数据结构可以用来序列化到下面的Json里面有一组子对象?
例子:
{
"John": {
"Type": "Person",
"age": 30,
"Sean": {
"Type": "child",
"age": 3
},
"Julian": {
"Type": "child",
"age": 4
}
},
"Paul": {
"Type": "Person",
"age": 64,
"Stella": {
"Type": "child",
"age": 10
},
"James": {
"Type": "child",
"age": 12
}
}
}
编写 John 和 Paul 可以通过以下方式完成: Map<String,Person>
但我无法弄清楚如何在没有“children”属性的情况下嵌套 Child。
例子:
{
"John": {
"Type": "Person",
"age": 30,
"children": {
"Sean": {
"Type": "child",
"age": 3
},
"Julian": {
"Type": "child",
"age": 4
}
}
}
}
我不确定它是否相关,但 Gson 被用于创建 Json 文件
我不确定 GSON 是否可能,尽管 Jackson 可能。
使用 GSON 您可以尝试自定义JsonSerializer
,它可能看起来像这样:
private static class PersonTypeSerializer implements JsonSerializer<Person> {
@Override
public JsonElement serialize(Person person, Type type, JsonSerializationContext jsonSerializationContext) {
JsonObject personJson = personToJson(person);
for (Map.Entry<String, Person> child : person.getChildren().entrySet()) {
personJson.add(child.getKey(), personToJson(child.getValue()));
}
return personJson;
}
private static JsonObject personToJson(Person person) {
JsonObject personJson = new JsonObject();
personJson.addProperty("Type", person.getType());
personJson.addProperty("age", person.getAge());
return personJson;
}
}
并像这样注册到 GSON 实例:
Gson gson = new GsonBuilder().registerTypeAdapter(Person.class, new PersonTypeSerializer())
.create();
请注意,代码假定类型"Person"
和"child"
都由相同的Person
class 表示。 如果没有,修改它应该很容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.