与Gson解析时跳过级别 [英] Skip level when parse with 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屋!