[英]Mapping Json Array with Objects as String names (Java)
我有json:
{
"albums": [
{
"default": {
"privacy": "public"
......
}
}
},
{
"second_album": {
"privacy": "public"
......
}
},
{
"third_album": {
"privacy": "public"
......
}
}
}
]
}
我想为此json创建Java对象。
public class AlbumsResponse {
private List<Album> albums = new ArrayList<>();
public List<Album> getAlbums() {
return albums;
}
public void setAlbums(List<Album> albums) {
this.albums = albums;
}
}
和
public class Album {
private Title title;
public Title getTitle() {
return title;
}
public void setTitle(Title title) {
this.title = title;
}
}
但正如您所见,专辑在json中没有任何“标题”字段,但具有类似的内容
"second_album": {
"privacy": "public"
......
}
如何处理? 如何将json-array中以json-object为单位的名称转换为java-object中的字段“ title”?
根据您的问题,我不确定要如何将显示的对象转换为Title
,但是我相信您可以使用自定义反序列化器来实现所需的功能。
例如,以下反序列化器获取JSON对象的第一个键,将其包装在Title
,然后返回具有该Title
的Album
:
public static class AlbumDeserializer implements JsonDeserializer<Album> {
@Override
public Album deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
// Get the key of the first entry of the JSON object
JsonObject jsonObject = json.getAsJsonObject();
Map.Entry<String, JsonElement> firstEntry = jsonObject.entrySet().iterator().next();
String firstEntryKey = firstEntry.getKey();
// Create a Title instance using this key as the title
Title title = new Title();
title.setTitle(firstEntryKey);
// Create an Album instance using this Title
Album album = new Album();
album.setTitle(title);
return album;
}
}
然后,您可以在Gson
实例中注册此自定义反序列化器,并使用其转换JSON:
Gson gson = new GsonBuilder()
.registerTypeAdapter(Album.class, new AlbumDeserializer())
.create();
AlbumsResponse response = gson.fromJson(json, AlbumsResponse.class);
System.out.println(response);
假设您的类以基本方式实现toString
在您的示例中运行它会显示以下内容:
AlbumsResponse{albums=[Album{title=Title{title='default'}}, Album{title=Title{title='second_album'}}, Album{title=Title{title='third_album'}}]}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.