如何使用Gson动态处理json响应数组/对象

Rockin:

我面临一个问题,有时Json响应返回一个对象数组,有时是对象本身,我们如何在响应类中动态处理。在当前例如:results有时会得到一个对象数组

 "\"results\": " +
            "[{" +

有时是对象本身

 "\"results\": " +
            "{" +

例如:

我们该如何处理呢?

Gson gson = new Gson();
    SearchResponse response=new SearchResponse();
    response= gson.fromJson("{" +
            "\"completed_in\": 0.047," +
            "\"max_id\": 291771567376039936," +
            "\"max_id_str\": \"291771567376039936\"," +
            "\"next_page\": \"?page=2&max_id=291771567376039936&q=javacodegeeks\"," +
            "\"page\": 1," +
            "\"query\": \"javacodegeeks\"," +
            "\"refresh_url\": \"?since_id=291771567376039936&q=javacodegeeks\"," +
            "\"results\": " +
            "{" +
            "\"created_at\": \"Thu, 17 Jan 2013 04:58:57 +0000\"," +
            "\"from_user\": \"hkokko\"," +
            "\"from_user_id\": 24726686," +
            "\"from_user_id_str\": \"24726686\"," +
            " \"from_user_name\": \"Hannu Kokko\"," +
            " \"geo\": null," +
            "\"id\": 291771567376039936," +
            "\"id_str\": \"291771567376039936\"," +
            "\"iso_language_code\": \"en\"," +
            " \"metadata\": {" +
            "\"result_type\": \"recent\"}," +
            "\"profile_image_url\": \"hjh\"," +
            "\"profile_image_url_https\": \"kkj\"," +
            "\"source\": \"<a href="hj;\"," +
            "\"text\": \"Continuous Deployment: Are You Afraid It Might Work? jh\"," +
            "\"to_user\": null," +
            "\"to_user_id\": 0," +
            "\"to_user_id_str\": \"0\"," +
            "\"to_user_name\": null" +
            " }," +
            "\"results_per_page\": 15," +
            "\"since_id\": 0," +
            "\"since_id_str\": \"0\"" +
            "}", SearchResponse.class);
    System.out.println(response.toString());

请协助...

任何人都可以通过使用不同的罐子来提出任何建议吗?

Rockin:

我找到了一个解决方案,我觉得可以分享这一点。代码将自动转换..如果例外响应是响应类中的arraylist...。然后,如果对象即将响应,则添加到arraylist,否则将添加到arraylist相同的清单。我们需要在响应fromJson之前更改响应。

public class ArrayAdapter<T> extends TypeAdapter<List<T>> {
    private Class<T> adapterclass;

    public ArrayAdapter(Class<T> adapterclass) {

        this.adapterclass = adapterclass;
    }

    public List<T> read(JsonReader reader) throws IOException {


        List<T> list = new ArrayList<T>();

        Gson gson = new Gson();

        if (reader.peek() == JsonToken.BEGIN_OBJECT) {

            T inning = (T) gson.fromJson(reader, adapterclass);
            list.add(inning);

        } else if (reader.peek() == JsonToken.BEGIN_ARRAY) {

            reader.beginArray();
            while (reader.hasNext()) {
                T inning = (T) gson.fromJson(reader, adapterclass);
                list.add(inning);
            }
            reader.endArray();

        } else {
            reader.skipValue();
        }

        return list;
    }

    public void write(JsonWriter writer, List<T> value) throws IOException {

    }

}

public class ArrayAdapterFactory implements TypeAdapterFactory {

  @SuppressWarnings({ "unchecked" })
  @Override
  public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> type) {

      ArrayAdapter typeAdapter = null;
      try {
          if (type.getRawType() == List.class)
          {

              typeAdapter = new ArrayAdapter(
                      (Class) ((ParameterizedType) type.getType())
                              .getActualTypeArguments()[0]);
          }
      } catch (Exception e) {
          e.printStackTrace();
      }

      return typeAdapter;
}

然后打电话

 Gson gson = new GsonBuilder().registerTypeAdapterFactory(new ArrayAdapterFactory()).create();
 SearchResponse response;
 esponse= gson.fromJson("your json string", SearchResponse.class)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从JSON使用GSON提取多个对象

如何获取JSON数组并使用gson解析每个json对象?(改造)

如何使用GSON / JSON将字符串数组转换为对象?

如何在反序列化JSON响应中使用Gson处理NumberFormatException

如何使用Gson库反序列化对象的JSON数组?

如何使用GSON解析动态JSON字段?

如何使用Gson解析JSON数组

JSON-使用Gson反序列化动态对象

使用GSON从JSON获取数组及其对象

使用Retrofit和Gson解析JSON数组响应

如何通过gson解析具有多个对象的json数组?

GSON。如何将json对象转换为json数组?

使用gson在Android中将json数组转换为json对象?

使用Gson优雅地处理嵌套的json对象?

如何使用gson / retrofit获取对象数组?

如何使用Java Gson库转换动态JSON响应

如何从Web API JSON响应派生C#动态对象?

如何使用gson在Kotlin的Json数组中插入Json对象

如何使用Retrofit2和GSON从响应中获取特定的JSON数组?

如何使用ember处理嵌套的json响应?

使用节点动态填充对象的JSON数组

如何使用GSON解析多个嵌套的JSON对象/数组?

如何在ajax响应中获取Json对象的动态值

如何使用javascript将JSON对象处理为数组

如何使用GSON从JSON响应中获取对象数组

使用 Gson 在动态密钥对象中使用动态密钥对象解析 JSON

如何使用angularjs构建动态json对象数组?

如何使用 jsonDecoder 处理来自 JSON 响应的动态键?

如何使用动态对象过滤对象数组?