gpt4 book ai didi

java - 使用 Gson 泛化字段名称

转载 作者:行者123 更新时间:2023-12-01 12:49:10 25 4
gpt4 key购买 nike

我有一个如下所示的 JSON 对象:

       {
"isDefault": false,
"someIndex":
[
0
],
"label": "Hello",
"valueKindName": "someId",
"value": 3,
"conditions":
{
"salesType":
[
1,
2
],
"productType":
[
1,
5
]
}
}

现在我的条件类如下所示:

public class Conditions {

private List<Integer> salesType = new ArrayList<Integer>();
private List<Integer> productType = new ArrayList<Integer>();

}

这有效。我想做的是概括我的类,以便我可以将任何新类型应用于以下条件:

   "exampleType":
[
6,
9
]

无需添加

private List<Integer> exampleType = new ArrayList<Integer>();

到我的Conditions.class

我想到了以下几点:

public class Conditions {

private ArrayList<Condition> conditions = new ArrayList<Condition>();
}

public class Condition {

private String key;
private ArrayList<Integer> values;
}

但是Gson当然不知道如何将JSON转换为那种类型的数据结构。

任何帮助都将受到高度赞赏:)

最佳答案

您可以注册自己的转换器。它看起来有点像这样:

public class ConditionConverter implements JsonSerializer<Condition>, JsonDeserializer<Condition>
{
@Override
public JsonElement serialize(Condition src, Type typeOfSrc, JsonSerializationContext context)
{
final JsonObject cond = new JsonObject()
cond.add(src.key, context.serialise(src.values);

return cond;
}

public Condition deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException
{
// pick apart and make a condition again
}
}

然后,您可以使用 GsonBuilder 注册类型适配器:

builder.registerTypeAdapter(Condition.class, new ConditionConverter());

要拆开您的对象,您需要使用 JsonObject.entrySet() ,因为您事先不知道 key 名称。如果您采用这样的 JSON,您的工作会稍微容易一些:

{
key: "exampleType",
values: [ 42, 43 ]
}

关于java - 使用 Gson 泛化字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24382063/

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