与Gson解析时跳过级别 [英] Skip level when parse with Gson

查看:100
本文介绍了与Gson解析时跳过级别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些json格式,如下所示:

I have some json format look like:

{
"root": {
    "user": {
        "name":"Name",
        "age":99,
        "another_obj": {
            "f1":"abc",
            "f2":1
        }
    }
},
"result_code": 0
}

我创建了一些模型,如下所示:

I create some model look like:

class User {
private String name;
private int age;
@SerializedName("detail")
private Detail
}

class Detail{
   // Define something.
}

最后,我创建了类名UserWapper.

finally I create class name UserWapper.

class UserWapper {
@SerializedName("root")
private User user;  
}

要解析json:

String json = "STRING_JSON_ABOVE";
Gson gson = new Gson();
UserWrapper uw = gson.fromJson(json, UserWrapper.class);

但是目前我不希望创建类包装器.因为我上课很多.如果创建WrapperClass->:|

But current I don't want create class Wrapper. Because I have many many class. If create WrapperClass -> :|

我想做类似的事情:

User u = gson.fromJson(json, User.class).

(注意:我无法从服务器更改格式数据json.我也gg搜索了一些自定义gson适配器,但是找不到跳过级别"另一个字段的方法.)

(Note: I can't change format data json from server. I also gg search something custom gson adapter but I don't find a way for skip "level" another field).

推荐答案

如果您不希望使用包装类,则可以将json字符串解析为JsonObject,然后获取其user对象,并反序列化用户对象User类的实例.

If you don't want a wrapper class, you can parse your json string to a JsonObject, then get its user object, and deserialize the user object to an instance of your User class.

尝试以下代码:

String json = "{\"root\":{\"user\":{\"name\":\"Name\",\"age\":99,\"another_obj\":{\"f1\":\"abc\",\"f2\":1}}},\"result_code\":0}";
Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(json, JsonObject.class);
User u = gson.fromJson(((JsonObject)jsonObject.get("root")).get("user"), User.class);

System.out.println("user.name: " + u.name);
System.out.println("user.age: " + u.age);

输出:

user.name:名称
用户年龄:99

user.name: Name
user.age: 99

这篇关于与Gson解析时跳过级别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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