java - Gson - 序列化时避免不必要的包装类

标签 java gson wrapper

我有一个 Json 字符串:

{
    "Locations":{
        "Location":[{
            "elevation":"100",
            "latitude":"0",
            "longitude":"0",
            "name":"Ocean"
        },
        ...
    ]}
}

我想使用 Gson 将其序列化为 Location 类的数组:

public class Location {
    public double elevation;
    public double latitude;
    public double longitude;
    public String name;
}

而不是创建一个 Locations 类和一个带有 Locations 字段的包装类。这是可能的吗?

最佳答案

您可以获得Locaitons 对象,然后是Location 数组。下面的代码是纯 Gson:

String jsonAsText = "{\"Locations\":{\"Location\":[{\"elevation\":\"100\",\"latitude\":\"0\",\"longitude\":\"0\",\"name\":\"Ocean\"},{\"elevation\":\"100\",\"latitude\":\"0\",\"longitude\":\"0\",\"name\":\"Ocean\"}]}}";

GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();

java.lang.reflect.Type listType = new com.google.gson.reflect.TypeToken<List<Location>>(){}.getType();

JsonArray locationJsonList = (JsonArray) ((JsonObject) gson.fromJson(jsonAsText, JsonObject.class).get("Locations")).get("Location");
List<Location> locatioList = gson.fromJson(locationJsonList, listType);

关于java - Gson - 序列化时避免不必要的包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26084892/

相关文章:

java - GSON 预期为 BEGIN_ARRAY,但实际为 STRING

javascript - 如何创建包装器

java - 包装器和自动装箱

java - 签名 key 的算法 'SHA256withECDSA' 不等于有效的 HmacSHA* 算法名称,不能与 HS512 一起使用

javascript - 如何在 Bootstrap 轮播的下一个/上一个点击上加载 JSP 页面

android - 使用 gson 保存数据和 mediaplayer 服务时出错

c# - 类似于 GSON 的 Json.NET 松散类型选项

python - ctypes python 中的浮点指针并传递结构指针

java - 我在哪里可以获得 servlet-api.jar 的源代码?

java - Spring 安全 : ClassNotFoundException or IllegalArgumentException on deploy