来自服务器的我的JSON数据可能包含这样的对象或数组:
{
msg:'',
status:0,
data:{
name:'x',
age:2
}
}
或
{
msg:'',
status:0,
data:[{
name:'x',
age:2
},{
name:'y',
age:1
}]
}
我的豆子:
class Result<T>{
String msg;
int status;
T data;
}
class User{
String name;
int age;
}
现在如何使用JSON来相应地解析数据?这里的类User
只是其中一个bean,服务器也返回了其他类型的bean。
BTW,我在Android中使用这个库。
答案 0 :(得分:0)
答案 1 :(得分:0)
对于你的json数据,你应该像那样创建bean类,然后正常解析它:
class Result{
String msg;
int status;
ArrayList<User> data;
}
class User{
String name;
int age;
}
答案 2 :(得分:0)
把你的json响应here并在url源中选择:json,Annotation样式:Gson
然后尝试exec
答案 3 :(得分:0)
如果你知道每个具体案例中的<T>
(你应该),你只需要ParameterizedType
,可以使用TypeToken
s轻松创建:
private static final Gson gson = new Gson();
private static final Type userType = new TypeToken<Result<User>>() {
}.getType();
private static final Type userListType = new TypeToken<Result<List<User>>>() {
}.getType();
public static void main(final String... args)
throws IOException {
final String withObjectJson = getPackageResourceString(Q43658341.class, "with-object.json");
final String withMultipleJson = getPackageResourceString(Q43658341.class, "with-array.json");
final Result<User> user = gson.fromJson(withObjectJson, userType);
dumpUsers(singletonList(user.data));
final Result<List<User>> multipleUsers = gson.fromJson(withMultipleJson, userListType);
dumpUsers(multipleUsers.data);
}
private static void dumpUsers(final Iterable<User> users) {
for ( final User u : users ) {
System.out.println(u.name);
}
}
请注意,Type
个实例可以被视为常量并创建一次,以及Gson
实例可以。
如果您想将值“对齐”到列表,那么您可能会对Retrofit and Gson: parsing array/element-polymorphic objects感兴趣:
class Result<E> {
String msg;
int status;
@JsonAdapter(AlwaysListTypeAdapterFactory.class) List<E> data;
}
答案 4 :(得分:0)
我假设您无法预测响应的形式,它是动态的 - 有时是单个对象,有时是列表。简单的解决方案是首先只存储JsonElement
:
class Result{
String msg;
int status;
JsonElement data;
}