Как сопоставить имена свойств JSON с нашими собственными именами переменных во время сериализации?

1

Я пытаюсь сериализовать мой ниже JSON в класс DataMetrics -

String json = "[{\"min\": 0,\"max\": 1209,\"avg\": 1.9203402,\"count\": 7344636,\"sumSq\": 71832774,  \"stddev\": 2.4683187, \"median\": 2,\"percentileMap\": {\"95\": 4},\"metricName\": \"TransactionDuration\",\"dimensions\": {\"env\": \"dev\",\"pool\": \"titan\",\"Name\": \"Client::Sync\", \"Type\": \"Client::Sync\"},\"value\": 14104200}]";

Как правило, для вложенных объектов, таких как dimensions вы будете объявлять другое POJO для него

class DataMetrics {

private String metricName;
private Map<String, Integer> percentileMap;
private String median;
private String stddev;
private String sumSq;
private String count;
private String avg;
private String max;
private String min;

  private Dimensions dimensions;

  private class Dimensions{
    private String env;
    private String pool;
    private String Name;
  }
}

И ниже - код, который у меня есть, который отлично работает -

public void test() {
    String json = "[{\"min\": 0,\"max\": 1209,\"avg\": 1.9203402,\"count\": 7344636,\"sumSq\": 71832774,  \"stddev\": 2.4683187, \"median\": 2,\"percentileMap\": {\"95\": 4},\"metricName\": \"TransactionDuration\",\"dimensions\": {\"env\": \"dev\",\"pool\": \"titan\",\"Name\": \"Client::Sync\", \"Type\": \"Client::Sync\"},\"value\": 14104200}]";

    final Gson gson = new Gson();
    final Type type = new TypeToken<List<DataMetrics>>() {}.getType();
    final List<DataMetrics> records = gson.fromJson(json, type);
}

Здесь имена переменных-членов соответствуют имени свойства JSON точно так, как оно есть.

  • stdDev => stddev
  • name => Name
  • percentile => percentileMap

Теперь Есть ли способ, я могу иметь свои собственные имена переменных и сопоставить имя свойства JSON с этими именами, если это возможно? Я не хочу указывать Name в качестве имени переменной в классе Dimensions.

Теги:
serialization
gson

1 ответ

2
Лучший ответ

Использовать аннотацию SerializedName:

import com.google.gson.annotations.SerializedName;

class DataMetrics {

    [..]

    private Dimensions dimensions;

    private class Dimensions{
        private String env;
        private String pool;
        @SerializedName("Name")
        private String nameYouWant;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню