我有一些json格式:
{
"root": {
"user": {
"name":"Name",
"age":99,
"another_obj": {
"f1":"abc",
"f2":1
}
}
},
"result_code": 0
}
我创建了一些模型:
class User {
private String name;
private int age;
@SerializedName("detail")
private Detail
}
class Detail{
// Define something.
}
最后我创建了类名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);
但目前我不想创建类Wrapper。因为我有很多班级。如果创建WrapperClass - > :|
我想做类似的事情:
User u = gson.fromJson(json, User.class).
(注意:我无法从服务器更改格式数据json。我也会搜索一些自定义gson适配器,但我找不到跳过的方法" level"另一个字段)
答案 0 :(得分:3)
如果你不想要一个包装器类,可以将你的json字符串解析为JsonObject
,然后获取它的user
对象,并将用户对象反序列化为{{1}的实例}。class。
尝试以下代码:
User
<强>输出:强>
user.name:名称
user.age:99
答案 1 :(得分:0)
我刚刚实现了另一种方法:在仅包含包装器对象的字段上注释JsonAdapter。 JsonAdapter实际上是一个TypeAdapterFactory,如下所示:
/**
* Use with {@link com.google.gson.annotations.JsonAdapter} on fields to skip a single pseudo object
* for map-like types.
*/
public class UnwrappingJsonAdapter implements TypeAdapterFactory {
@Override
public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> type) {
return new TypeAdapter<T>() {
@Override
public void write(JsonWriter out, T value) throws IOException {
out.beginObject();
out.name(type.getType().getClass().getSimpleName());
gson.toJson(value, type.getType(), out);
out.endObject();
}
@Override
public T read(JsonReader in) throws IOException {
in.beginObject();
in.nextName();
final T object = gson.fromJson(in, type.getType());
in.endObject();
return object;
}
};
}
}
这对我有用。其他人可能希望在序列化中自定义合成对象的名称。反序列化也不是很强大或灵活。