gpt4 book ai didi

java - 使用 Gson() 创建一个 "flat"JSON

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:10 25 4
gpt4 key购买 nike

我想制作一个类的“平面”JSON。

假设我有如下类:

public class Parcel {
private double area;
private int type;
private Address address;
}

public class Address {
private String street;
private int number;
private int flatNumber;
}

是否有机会使 JSON 看起来像这样:

{
"area":0.0,
"type":1,
"Address.street":"street name",
"Address.number":22,
"Address.flatNumber":29
}

我不需要反序列化 JSON。我需要将它发送到 WS。

最佳答案

一种选择是编写自定义序列化程序,以便您可以控制要发送的 json 方案。

private static class ParcelSerializer implements JsonSerializer<Parcel> {
@Override
public JsonElement serialize(Parcel src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject obj = new JsonObject();
obj.addProperty("area", src.area);
obj.addProperty("type", src.type);
JsonObject addrObj = context.serialize(src.address, Address.class).getAsJsonObject();
for(Map.Entry<String, JsonElement> e : addrObj.entrySet()) {
obj.add("Address."+e.getKey(), e.getValue());
}
return obj;
}
}

然后你只需要将它注册到GsonBuilder:

Gson gson = new GsonBuilder().setPrettyPrinting().registerTypeAdapter(Parcel.class, new ParcelSerializer()).create();
String json = gson.toJson(p, Parcel.class);

根据您的示例,它输出:

{
"area": 0.0,
"type": 1,
"Address.street": "street name",
"Address.number": 22,
"Address.flatNumber": 29
}

关于java - 使用 Gson() 创建一个 "flat"JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30097954/

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