GSON — обрезать строку во время десериализации из JSON

#java #json #string #gson

#java #json #строка #gson

Вопрос:

У меня есть строка 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. Возможно ли что-то подобное?

Комментарии:

1. Почему бы и нет? … for (String key : parsedData.keySet()) parsedData.put(key, parsedData.get(key).trim()); По общему признанию, это делается после синтаксического анализа, который отличается от запроса, который вы опубликовали в своем вопросе.

Ответ №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();