gpt4 book ai didi

Gson句柄对象或数组

转载 作者:行者123 更新时间:2023-12-03 06:13:06 27 4
gpt4 key购买 nike

我有以下类(class)

public class MyClass {
private List<MyOtherClass> others;
}

public class MyOtherClass {
private String name;
}

我的 JSON 可能看起来像这样

{
others: {
name: "val"
}
}

或者这个

{
others: [
{
name: "val"
},
{
name: "val"
}
]
}

我希望能够对这两种 JSON 格式使用相同的 MyClass。有没有办法用 Gson 做到这一点?

最佳答案

我想出了一个答案。

private static class MyOtherClassTypeAdapter implements JsonDeserializer<List<MyOtherClass>> {
public List<MyOtherClass> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext ctx) {
List<MyOtherClass> vals = new ArrayList<MyOtherClass>();
if (json.isJsonArray()) {
for (JsonElement e : json.getAsJsonArray()) {
vals.add((MyOtherClass) ctx.deserialize(e, MyOtherClass.class));
}
} else if (json.isJsonObject()) {
vals.add((MyOtherClass) ctx.deserialize(json, MyOtherClass.class));
} else {
throw new RuntimeException("Unexpected JSON type: " + json.getClass());
}
return vals;
}
}

像这样实例化一个Gson对象

Type myOtherClassListType = new TypeToken<List<MyOtherClass>>() {}.getType();

Gson gson = new GsonBuilder()
.registerTypeAdapter(myOtherClassListType, new MyOtherClassTypeAdapter())
.create();

TypeTokencom.google.gson.reflect.TypeToken

您可以在此处阅读有关解决方案的信息:

https://sites.google.com/site/gson/gson-user-guide#TOC-Serializing-and-Deserializing-Gener

关于Gson句柄对象或数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668507/

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