gpt4 book ai didi

android - 使用 GSON 将嵌套对象展平为目标对象

转载 作者:行者123 更新时间:2023-11-29 20:54:51 24 4
gpt4 key购买 nike

最亲爱的 Stackoverflowers,

我想知道是否有人知道如何最好地解决这个问题;我正在与一个返回 json 对象的 api 对话,如下所示:

{
"field1": "value1",
"field2": "value2",
"details": {
"nested1": 1,
"nested2": 1

}

在 java 中,我有一个对象(实体),例如,它将具有所有这些字段,但详细信息作为松散字段,因此:字段 1、字段 2、嵌套 1、嵌套 2。

这是因为它是一个 android 项目,我不能只将带有信息的类保存到我的实体中,因为我绑定(bind)到 ormlite。

有什么方法可以使用 GSON 将字段转换为我的对象吗?请注意,我现在正在使用通用类直接从 API 转换它们。我想存储这些字段(其中包含作为 int 的信息)。在同一个实体中。

最佳答案

您可以编写一个自定义类型适配器来将 json 值映射到您的 pojo。

定义一个 pojo:

public class DataHolder {
public List<String> fieldList;
public List<Integer> detailList;
}

编写自定义类型适配器:

public class CustomTypeAdapter extends TypeAdapter<DataHolder> {
public DataHolder read(JsonReader in) throws IOException {
final DataHolder dataHolder = new DataHolder();

in.beginObject();

while (in.hasNext()) {
String name = in.nextName();

if (name.startsWith("field")) {
if (dataHolder.fieldList == null) {
dataHolder.fieldList = new ArrayList<String>();
}
dataHolder.fieldList.add(in.nextString());
} else if (name.equals("details")) {
in.beginObject();
dataHolder.detailList = new ArrayList<Integer>();
} else if (name.startsWith("nested")) {
dataHolder.detailList.add(in.nextInt());
}
}

if(dataHolder.detailList != null) {
in.endObject();
}
in.endObject();

return dataHolder;
}

public void write(JsonWriter writer, DataHolder value) throws IOException {
throw new RuntimeException("CustomTypeAdapter's write method not implemented!");
}
}

测试:

    String json = "{\"field1\":\"value1\",\"field2\":\"value2\",\"details\":{\"nested1\":1,\"nested2\":1}}";

GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(DataHolder.class, new CustomTypeAdapter());

Gson gson = builder.create();

DataHolder dataHolder = gson.fromJson(json, DataHolder.class);

输出: enter image description here

关于类型适配器:

https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/TypeAdapter.html

http://www.javacreed.com/gson-typeadapter-example/

关于android - 使用 GSON 将嵌套对象展平为目标对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28054985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com