使用Gson的包装器关键字反序列化json [英] Deserialze json with a wrapper keyword with Gson
问题描述
我在我的应用程序中使用 retroft
和 gson
作为请求/响应。
从服务器获取json对象的json结构如下所示:
I am using retroft
and gson
for request/response in my app.
The json structure I get from server for json object is like:
{
"data": {
"name": "Rogelio Volkman",
"address": "27299 Will Bridge Suite 058\nWest Reubenhaven, MI 00736",
"lat": 54.65,
"lng": 111.75,
"phone": "+26(4)5015498663",
"user": {
"data": [
{
"name": "Mehrdad"
}
]
}
}
}
正如您所看到的,每个模型都包含在 data
关键字中。
对于json数组响应,结果如下所示:
As you see every model is wrapped around data
keyword.
For json array response the result is like:
{
"data": [
{
"name": "Rogelio Volkman",
"address": "27299 Will Bridge Suite 058\nWest Reubenhaven, MI 00736",
"lat": 54.65,
"lng": 111.75,
"phone": "+26(4)5015498663",
"user": {
"data": [
{
"name": "Mehrdad"
}
]
}
},
{
"name": "Jovani Ritchie",
"address": "920 Winona Lake\nAlisashire, GA 27145",
"lat": -32.57,
"lng": 134.6,
"phone": "442.530.4166",
"user": {
"data": [
{
"name": "Mehrdad"
}
]
}
}
}
现在我想创建一个类,它使用GSON对这些响应进行反序列化,但是我不能
JsonDeserializer< DataObjectModel>
因为在 deserialize
方法中,我没有知道调用 je.getJsonObject(data)
或 je.getJsonArray(data)
>。
如何反序列化这个响应?
Now I want to Create a class which deserialises theses responses with GSON, but I can't implement
JsonDeserializer<DataObjectModel>
since in the deserialize
method I don't know wheter to call je.getJsonObject("data")
or je.getJsonArray("data")
.
How to deserialize this response?
推荐答案
b $ b
@Override
public DataObjectModel deserialize(JsonElement json, Type type,
JsonDeserializationContext context) throws JsonParseException {
JsonElement data = ((JsonObject) json).get("data");
if(data.isJsonArray()) {
JsonArray dataArr = data.getAsJsonArray();
//do smth with array
} else {
JsonObject dataObj = data.getAsJsonObject();
//do smth with object
}
...
这篇关于使用Gson的包装器关键字反序列化json的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!