我正在使用Flickr API。调用flickr.test.login
方法时,默认的JSON结果如下:
{
"user": {
"id": "21207597@N07",
"username": {
"_content": "jamalfanaian"
}
},
"stat": "ok"
}
我想将这个响应解析为一个Java对象:
public class FlickrAccount {
private String id;
private String username;
// ... getter & setter ...
}
JSON属性应该按照以下方式进行映射:
"user" -> "id" ==> FlickrAccount.id
"user" -> "username" -> "_content" ==> FlickrAccount.username
很遗憾,我无法使用注释找到一种漂亮、优雅的方式来处理这个问题。到目前为止,我的方法是将JSON字符串读入到Map<String, Object>
中,并从那里获取值。
Map<String, Object> value = new ObjectMapper().readValue(response.getStream(),
new TypeReference<HashMap<String, Object>>() {
});
@SuppressWarnings( "unchecked" )
Map<String, Object> user = (Map<String, Object>) value.get("user");
String id = (String) user.get("id");
@SuppressWarnings( "unchecked" )
String username = (String) ((Map<String, Object>) user.get("username")).get("_content");
FlickrAccount account = new FlickrAccount();
account.setId(id);
account.setUsername(username);
但我认为这是最不优雅的方式。是否有任何简单的方法,可以使用注释或自定义反序列化器来解决?
对我来说很明显,但当然它无法工作:
public class FlickrAccount {
@JsonProperty( "user.id" ) private String id;
@JsonProperty( "user.username._content" ) private String username;
// ... getter and setter ...
}