Как справиться с глубоко вложенным JSON-ответом Reddit Apis в Android? - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь использовать Reddit API в Android. В настоящее время я использую Retrofit с GSon.

Одна из конечных точек, с которой я имею дело, имеет очень сложный ответ API.

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

Вот что ответ APIвыглядит так: https://gist.github.com/roysailor/c991d8a854c064cbc48e2ee2d2ad2b69

Я пытался создать класс модели для него, но это, кажется, очень длительный процесс.

Другие варианты используют генераторы POJO или ручной анализ JSON.

Что, по вашему мнению, является лучшим способом справиться с таким ответом?

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Я думаю, " лучший способ справиться с этим " основан на мнении, но из любопытства я скопировал ваш необработанный JSON в jsonschema2pojo.org и он дал 4 классаописывая ваши данные (так что это не так сложно).

Вы определенно можете импортировать их в свою кодовую базу, поскольку Reddit API вряд ли изменит свою модель, не предупредив вас.

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

Example.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);
    }

}

Не стесняйтесь возиться с параметрами, чтобы лучше соответствовать вашей кодовой базе.

0 голосов
/ 23 октября 2019

Используйте Gson в сочетании с POJO, созданными в ответе Артура.

Лучший способ обработки JSON - это определить структуры данных в JSON, создать POJO, представляющие эти структуры, а затем использовать GSON или другую библиотеку сериализации JSON для преобразования из POJO в строку JSON и обратно.

https://github.com/google/gson

...