如何处理 android 中 reddit api 的深度嵌套 json 响应?
How to handle the deeply nested json response of reddit apis in android?
我正在尝试使用 android 中的 Reddit API。我目前正在使用带有 GSon 的 Retrofit。
我正在处理的端点之一有一个非常复杂的 API 响应。
https://oauth.reddit.com/subreddits/popular
API 响应如下所示:
https://gist.github.com/roysailor/c991d8a854c064cbc48e2ee2d2ad2b69
我试过为它创建一个模型class,但这似乎是一个非常漫长的过程。
其他选项使用 POJO 生成器或手动 JSON 解析。
您认为处理此类回复的最佳方式是什么?
我认为“处理此问题的最佳方法”是基于意见的,但出于好奇,我将您的原始 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);
}
}
随时 fiddle 调整参数以更好地适应您的代码库。
将 Gson
与 Arthur 的回答中创建的 POJO 结合使用。
处理JSON的最佳方法是识别JSON中的数据结构,创建表示这些结构的POJO,然后使用GSON或其他JSON序列化库进行转换从 POJO 到 JSON 字符串并返回。
我正在尝试使用 android 中的 Reddit API。我目前正在使用带有 GSon 的 Retrofit。
我正在处理的端点之一有一个非常复杂的 API 响应。
https://oauth.reddit.com/subreddits/popular
API 响应如下所示: https://gist.github.com/roysailor/c991d8a854c064cbc48e2ee2d2ad2b69
我试过为它创建一个模型class,但这似乎是一个非常漫长的过程。
其他选项使用 POJO 生成器或手动 JSON 解析。
您认为处理此类回复的最佳方式是什么?
我认为“处理此问题的最佳方法”是基于意见的,但出于好奇,我将您的原始 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);
}
}
随时 fiddle 调整参数以更好地适应您的代码库。
将 Gson
与 Arthur 的回答中创建的 POJO 结合使用。
处理JSON的最佳方法是识别JSON中的数据结构,创建表示这些结构的POJO,然后使用GSON或其他JSON序列化库进行转换从 POJO 到 JSON 字符串并返回。