【问题标题】:GSON - trim string during deserialization from JSONGSON - 在从 JSON 反序列化期间修剪字符串
【发布时间】:2020-10-14 09:05:14
【问题描述】:

我有一个 JSON 字符串,它使用 GSON 库解析成一个 Map,如下所示:

static Type type = new TypeToken<Map<String, String>>() {}.getType();
// note the trailing/leading white spaces
String data = "{'employee.name':'Bob  ','employee.country':'  Spain  '}";

Map<String, String> parsedData = gson.fromJson(data, type);

我遇到的问题是,我的 JSON 属性值具有需要修剪的尾随/前导空格。理想情况下,我希望在使用 GSON 将数据解析到 Map 时完成此操作。这样的事情可能吗?

【问题讨论】:

  • 为什么不呢? ... for (String key : parsedData.keySet()) parsedData.put(key, parsedData.get(key).trim()); 诚然,这是在解析 之后完成的 - 这与您在问题中发布的请求不同。

标签: java json string gson


【解决方案1】:

您需要实现自定义 com.google.gson.JsonDeserializer 反序列化器来修剪 String 值:

class StringTrimJsonDeserializer implements JsonDeserializer<String> {

    @Override
    public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        final String value = json.getAsString();
        return value == null ? null : value.trim();
    }
}

而且,你需要注册它:

Gson gson = new GsonBuilder()
        .registerTypeAdapter(String.class, new StringTrimJsonDeserializer())
        .create();

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 2013-10-16
    • 2021-08-25
    • 1970-01-01
    • 2016-01-05
    • 2013-07-16
    • 1970-01-01
    • 2014-02-27
    相关资源
    最近更新 更多