动态 Json 响应映射到 Pojo
Dynamic Json Response mapping to Pojo
我正在使用 API,其中 returns 动态数量的 JSON 键用于给定响应(假设最小为 20 个,最大为 30 个)。我提前知道所有可能的密钥,我只是不知道给定的响应会返回多少。
如何将这些字段映射到具有最大字段数 (30) 且所有缺失字段均为空的 POJO。因此,如果响应包含 20 个键,我希望 POJO 使用 JSON 中的相应值填充其所有字段,而 POJO 中的其他 10 个字段保持为空。
目前我正在使用 Retrofit 和 GSON,但如果我能找到一种方法来使用其他库,我会很乐意做出改变。
使用杰克逊
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
...
static class Data {
public String k1;
public String k2;
public String k3;
// ...
public String kN;
}
public static void main(String[] args) throws JsonProcessingException {
Data data = new ObjectMapper().readValue("{\"k2\": \"value2\"}", Data.class);
System.out.printf("%s, %s, %s, ...%n", data.k1, data.k2, data.k3);
}
有输出
null, value2, null, ...
你可以使用 fromJson :
<POJO Class name> sampleVar = (new Gson()).fromJson(<JSON String>,<Class Name Here>);
还要在类名前添加:
@JsonInclude(JsonInclude.Include.ALWAYS)
public class ABCDEF {
我正在使用 API,其中 returns 动态数量的 JSON 键用于给定响应(假设最小为 20 个,最大为 30 个)。我提前知道所有可能的密钥,我只是不知道给定的响应会返回多少。
如何将这些字段映射到具有最大字段数 (30) 且所有缺失字段均为空的 POJO。因此,如果响应包含 20 个键,我希望 POJO 使用 JSON 中的相应值填充其所有字段,而 POJO 中的其他 10 个字段保持为空。
目前我正在使用 Retrofit 和 GSON,但如果我能找到一种方法来使用其他库,我会很乐意做出改变。
使用杰克逊
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
...
static class Data {
public String k1;
public String k2;
public String k3;
// ...
public String kN;
}
public static void main(String[] args) throws JsonProcessingException {
Data data = new ObjectMapper().readValue("{\"k2\": \"value2\"}", Data.class);
System.out.printf("%s, %s, %s, ...%n", data.k1, data.k2, data.k3);
}
有输出
null, value2, null, ...
你可以使用 fromJson :
<POJO Class name> sampleVar = (new Gson()).fromJson(<JSON String>,<Class Name Here>);
还要在类名前添加:
@JsonInclude(JsonInclude.Include.ALWAYS)
public class ABCDEF {