gpt4 book ai didi

java - JSON深度映射

转载 作者:太空狗 更新时间:2023-10-29 14:11:23 27 4
gpt4 key购买 nike

是否可以将 json 响应中较深的字段映射到对象中的属性 - 换句话说:将具有层次结构的 json 转换为平面对象?

例如,我想用“links.user.id”注释 Marker 类的“user_id”属性。我调查了 GSON 和 Jackson,但找不到解决方案。

标记的 Json 响应:

{
"id": 791,
"name": "Marker42",
"links": {
"user": {
"href": "http://4242.com/users/970",
"id": 970
}
}

数据模型:

public class Marker {
@SerializedName("id")
private int id;

@SerializedName("name")
private String name;

@SerializedName("links.user.id")
private int user_id;
}

最佳答案

这不是很漂亮,但您可以在 GSON 中设置自己的反序列化器。我对 Jackson 不太熟悉,但本教程展示了一种非常相似的方法:http://www.baeldung.com/jackson-deserialization

public static class MarkerGSONDeserializer implements JsonDeserializer<Marker>{

@Override
public Marker deserialize(JsonElement data, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
if(!data.isJsonObject()){
return null;
} else {
JsonObject obj = data.getAsJsonObject();
Marker res = new Marker();
res.setId(obj.get("id").getAsInt());
res.setName(obj.get("name").getAsString());
res.setUserId(((obj.get("links").getAsJsonObject())).get("user").getAsJsonObject()).get("id").getAsInt();
return res;
}
}

}

关于java - JSON深度映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27804526/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com