首页 > 解决方案 > 如何处理android中reddit apis深度嵌套的json响应?

问题描述

我正在尝试在 android 中使用 Reddit API。我目前正在使用带有 GSon 的 Retrofit。

我正在处理的端点之一具有非常复杂的 API 响应。

https://oauth.reddit.com/subreddits/popular

以下是 API 响应的样子: https ://gist.github.com/roysailor/c991d8a854c064cbc48e2ee2d2ad2b69

我已经尝试为它创建一个模型类,但这似乎是一个非常漫长的过程。

其他选项是使用 POJO 生成器或手动 JSON 解析。

您认为处理此类响应的最佳方法是什么?

标签: androidjsonrestretrofitreddit

解决方案


我认为“处理此问题的最佳方法”是基于意见的,但出于好奇,我将您的原始 JSON 复制粘贴到jsonschema2pojo.org 中,它产生了 4 个描述您的数据的类(所以它并不那么复杂)。

您绝对可以将它们导入您的代码库,因为 Reddit API 不太可能在不警告您的情况下更改其模型。

Child.java
Data.java // You should probably rename this
Data_.java // This aswell 
Example.java

例子.java:


package com.example;

import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "kind",
    "data"
})
public class Example {

    @JsonProperty("kind")
    private String kind;
    @JsonProperty("data")
    private Data data;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    @JsonProperty("kind")
    public String getKind() {
        return kind;
    }

    @JsonProperty("kind")
    public void setKind(String kind) {
        this.kind = kind;
    }

    @JsonProperty("data")
    public Data getData() {
        return data;
    }

    @JsonProperty("data")
    public void setData(Data data) {
        this.data = data;
    }

    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }

}

随意摆弄参数以更好地适应您的代码库。


推荐阅读