使用Gson的包装器关键字反序列化json [英] Deserialze json with a wrapper keyword with Gson

查看:127
本文介绍了使用Gson的包装器关键字反序列化json的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的应用程序中使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆