使用JSON解析对象或数组

时间:2017-04-27 12:49:57

标签: android json

来自服务器的我的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中使用这个库。

5 个答案:

答案 0 :(得分:0)

使用谷歌的gson

喜欢这个

Gson gson = new Gson(); Result result= gson.fromJson(jsonInString, Result.class);

答案 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;
   }